`
SuperCustomer
  • 浏览: 111365 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

OLAP4J访问XML/A

 
阅读更多

简介

olap4j is a common API for any OLAP server, so you can write an analytic application on one server and easily switch it to another. Built on that API, there is a growing collection of tools and components.

 

安装

下载地址:http://www.olap4j.org/

 

代码

import java.sql.DriverManager;
import java.sql.SQLException;

import org.olap4j.OlapConnection;
import org.olap4j.OlapException;
import org.olap4j.OlapWrapper;

public class OlapConnUtil {

	private static final String DRIVER_CLASS_NAME = "org.olap4j.driver.xmla.XmlaOlap4jDriver";

	static {
		try {
			Class.forName(DRIVER_CLASS_NAME);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static OlapConnection getOlapConn(String server, String catalog,
			String user, String password) throws SQLException {
		String url = "jdbc:xmla:Server=" + server;

		OlapConnection conn = null;
		try {
			conn = (OlapConnection) DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			throw e;
		}

		if (conn != null) {
			try {
				conn.setCatalog(catalog);
			} catch (OlapException e) {
				throw e;
			}

			OlapWrapper wrapper = (OlapWrapper) conn;
			OlapConnection olapConn = null;
			try {
				olapConn = wrapper.unwrap(OlapConnection.class);
				return olapConn;
			} catch (SQLException e) {
				throw e;
			}
		}

		return null;
	}

}

 

import java.io.PrintWriter;
import java.sql.SQLException;

import org.olap4j.Cell;
import org.olap4j.CellSet;
import org.olap4j.OlapConnection;
import org.olap4j.OlapException;
import org.olap4j.OlapStatement;
import org.olap4j.Position;
import org.olap4j.metadata.Member;

public class MdxQueryUtil {

	private static final String PARAM_KEY_SERVER = "server";
	private static final String PARAM_KEY_USER = "user";
	private static final String PARAM_KEY_PASSWORD = "password";
	private static final String PARAM_KEY_CATALOG = "catalog";
	private static final String PARAM_KEY_MDX = "mdx";

	private static final int RETRY_TIMES = 60;
	
	public static void main(String[] args) {
		String server = System.getProperty(PARAM_KEY_SERVER);
		String user = System.getProperty(PARAM_KEY_USER);
		String password = System.getProperty(PARAM_KEY_PASSWORD);
		String catalog = System.getProperty(PARAM_KEY_CATALOG);
		String mdx = System.getProperty(PARAM_KEY_MDX);
		try {
			print(query(server, catalog, user, password, mdx), new PrintWriter(System.out));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	private static OlapConnection getOlapConn(String server, String catalog,
			String user, String password, int retry) {
		int temp = retry;
		OlapConnection olapConn = null;
		while (olapConn == null && retry-- > 0) {
			try {
				if (temp > retry) {
					try {
						Thread.sleep(1000 * 3);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				olapConn = OlapConnUtil.getOlapConn(server, catalog, user, password);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return olapConn;

	}

	private static CellSet query(String server, String catalog, String user,
			String password, String mdx) throws SQLException {
		OlapConnection olapConn = getOlapConn(server, catalog, user, password, RETRY_TIMES);

		if (olapConn != null) {
			OlapStatement stmt = null;
			try {
				stmt = olapConn.createStatement();
			} catch (OlapException e) {
				throw e;
			}

			CellSet cellSet = null;

			if (stmt != null) {
				try {
					cellSet = stmt.executeOlapQuery(mdx);
				} catch (OlapException e) {
					throw e;
				}
			}

			if (cellSet != null) {
				try {
					cellSet.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					stmt = null;
				}
			}

			try {
				olapConn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				olapConn = null;
			}

			return cellSet;
		}

		return null;
	}

	private static void print(CellSet cellSet, PrintWriter writer) {
		if (cellSet != null && cellSet.getAxes().size() == 2) {
			for (Position row : cellSet.getAxes().get(1)) {
				for (Member member : row.getMembers()) {
					writer.print(member.getName() + "\t");
				}
				for (Position column : cellSet.getAxes().get(0)) {
					final Cell cell = cellSet.getCell(column, row);
					writer.print(cell.getFormattedValue() + "\t");
				}
				writer.println();
			}
			writer.flush();
		}
	}

}

 

分享到:
评论

相关推荐

    olap4j-0.9.7.309-JS-3.jar及其pom坐标

    2. **元数据访问**:通过OLAP4J,开发者可以获取关于立方体、维度、层次、成员和度量的详细信息,这些是构建OLAP查询的基础。 3. **查询构建和执行**:提供了API来构建MDX(多维表达式)查询,这是OLAP领域的标准...

    olap4j-0.9.7.309-JS-3.zip-Java工具类资源下载

    《olap4j:Java OLAP接口库解析与应用》 olap4j是一个开源的Java API,专门用于处理在线分析处理(Online Analytical Processing,OLAP)操作。这个库为开发者提供了一种标准的方式来访问各种多维数据源,如数据...

    Java olap4j-xmla-1.1.0.jar.zip

    这个库主要实现了OLAP4J规范,这是一个开放的Java API,旨在为Java开发者提供标准的接口来访问在线分析处理(OLAP)系统,比如SQL Server Analysis Services (SSAS)。下面将详细讲解这个库的相关知识点。 **OLAP4J*...

    olap4j-0.9.7.309-JS-3 的压缩包

    《olap4j-0.9.7.309-JS-3:揭秘Java OLAP接口技术》 OLAP4j,全称Open LDAP API for Java,是Java平台上的一个开放源代码的在线分析处理(Online Analytical Processing)接口。这个版本0.9.7.309-JS-3代表了该接口...

    olap4j-0.9.7.309-JS-3.jar.zip

    此外,olap4j还支持多种数据源类型,包括JDBC(Java Database Connectivity)和XMLA(XML for Analysis),这使得它能够与多种类型的OLAP服务器兼容,如 mondrian、MicroStrategy、Oracle OLAP等。同时,由于olap4j...

    olap4j-0.9.7.309-JS-3

    《olap4j-0.9.7.309-JS-3:JasperReports与OLAP技术的交汇》 在IT行业中,数据分析和报表生成是至关重要的环节,这通常涉及到在线分析处理(OLAP)和报表工具的使用。"olap4j-0.9.7.309-JS-3"是一个专门针对这些...

    mondrian_必须包.rar

    3. **olap4j-xmla-1.2.0.jar**:olap4j是一个Java API,用于访问OLAP服务器,而XML/A(XML for Analysis)是用于OLAP服务的标准接口。这个jar文件提供了对XML/A的支持,使得Mondrian可以通过XML/A协议与客户端应用...

    maven里面的jar包:itext-2.1.7.js2.jar-------olap4j-0.9.7.309-JS-3.jar

    OLAP4J提供了一种标准的方式来访问多维数据,使开发者可以轻松地在各种不同的OLAP服务器之间切换,如 Mondrian、Hyperion Essbase 等。这个版本号`0.9.7.309-JS-3`可能表示该库的一个特定发布,其中"JS"可能指的是...

    Oracle OLAP高级特性介绍.docx

    Oracle OLAP 提供了多种方式来访问多维数据集,包括: 1. 使用 Oracle Business Intelligence 企业版。 2. 使用 SQL 直接查询多维数据集和维度。 3. 使用 MDX Provider for Oracle OLAP,通过 Microsoft Excel ...

    Online Bibliography on Data Warehousing and OLAP

    这部分可能涉及了如何使用XML来表示和交换OLAP数据。 总结而言,这份文献综述不仅提供了关于数据仓库和OLAP的基本概念和技术细节,还深入探讨了相关的学术研究成果、实践经验和未来发展方向。这对于理解这两个领域...

    mondrian配置例子

    mondrian_example.zip, olap4j.jar,mondrian.jar,JPivot.war Mondrian配置是数据仓库和商业智能领域中的一个重要环节,它是一个开源的多维分析引擎,常用于在线分析处理(OLAP)系统。Mondrian通过与各种数据源...

    mylib_javaweb(hibernate、struts、mysql_jdbc、junit等包)

    开发者可以使用PreparedStatement、Statement等接口执行SQL语句,进行数据的增删改查操作,同时,JDBC驱动还提供了连接池等功能,优化了数据库的访问性能。 最后,JUnit是Java领域最常用的单元测试框架,它是 ...

    Pentaho多维分析(Mondrian)使用指南

    以及olap4j——一种Java API,为开发人员提供了一个类似JDBC的接口来访问OLAP数据源。 Mondrian采用Eclipse Public License开源许可,这意味着开发者可以自由地使用、修改和分发Mondrian的代码,极大地促进了其在...

    mondrian xmla配置需要的jar

    4. **wsdl4j-1.5.1.jar**:WSDL4J是Web服务描述语言(WSDL)的Java实现,它允许处理和操作WSDL文档。在mondrian XMLA环境中,这个库可能用于生成或解析描述mondrian服务的WSDL文件,使得客户端能够了解如何正确地...

    jpivot学习总结.doc

    4. JPivot标签库使用详解 4.1. Introduce JPivot 是一套基于 Mondrian 的 OLAP 前端展现工具,它提供了一套标签库来解决的 OLAP 的展现层问题。 在一个 JSP 页面当中,如果要使用 JPivot 标签库,除了要配置相关的...

    第四篇 新技术篇.pdf

    4. **当前研究热点**:包括但不限于分布式数据库、对象关系数据库、XML数据库、数据仓库与联机分析处理等领域。 #### 分布式数据库系统 分布式数据库系统是指数据分布在多个地理位置上,由不同的计算机节点组成的...

    PentahoBI的安装及配置手册[参照].pdf

    日志管理使用Log4j,其配置文件位于`biserver-ce\tomcat\webapps\pentaho\WEB-INF\classes\log4j.xml`,你可以根据需要定制日志输出级别和格式。 此外,为了提升Pentaho BI服务器的并发性能,还可以调整Tomcat的...

    La_Azada-开源

    这个库不仅支持 Mondrian,一个流行的开源OLAP引擎,还兼容XMLA(XML for Analysis),这是一种用于访问和控制分析数据的开放标准,使得La_Azada能够连接到各种支持XMLA的OLAP服务,如Microsoft Analysis Services等...

Global site tag (gtag.js) - Google Analytics