设为首页 加入收藏

TOP

mondrian使用测试(五)
2015-11-21 01:52:35 来源: 作者: 【 】 浏览:10
Tags:mondrian 使用 测试
drianResource的instance方法中(29)行调用了getThreadOrDefaultLocale函数,而在当前的类中没有定义这个函数,那么它一定是继承另外一个类,在父类中实现的,果然,它继承的是org.eigenbase.resgen.ShadowResourceBundle类,再查看一下这个类,我擦,在codegrep上根本搜不到这个类的源码,这时候请教google吧,搜出来这个网页:http://www.java2s.com/Code/Jar/e/Downloadeigenbaseresgenjar.htm,我勒个咔擦,我之前 下载的eigenbase-resgen.jar文件不就是在这里下载的吗?!而这个jar包中分明有org.eigenbase.resgen.ShadowResourceBundle类啊(要不然我的代码编译都不会通过的),一切又绕回来了,这时候该怎么办? 这时候我想起来了,既然mondrian自己能够编译通过,顺利执行,那么无论是在mondrian的maven依赖包中,还是在saifu中都应该有这个包的依赖,而且这个包应该就是可以使用的,而之前的eigenbase-resgen.jar不能使用可能是因为版本问题,查看了mondrian的pom.xml文件,发现它使用的是如下的版本:

      eigenbase
      eigenbase-resgen
      1.3.1
    

查看了saiku的pom.xml文件,它使用的是如下的版本:

               eigenbase
                eigenbase-resgen
                1.3.0.11873 
 

虽然这两个版本不一样,但是我想应该任何一个都可以吧,于是下了1.3.1版本的,将之前的jar包换了一下之后测试一下,OK了,得到了同样的结果。 虽然得到了相同的结果,但是这里还是使用mondrian之前的execute接口来执行MDX语句的,而不是通过olap4j的方式,代码中可以看到execute接口已经被抛弃了,查看mondrian文档看到这样的注释: Deprecated. This method is deprecated and will be removed in mondrian-4.0. It operates by internally creating a statement. Better to use olap4j and explicitly create a statement. 这里说这个接口将在mondrian 4.0以后被移除了,建议使用olap4j接口创建statement的方式代替,于是又在网上搜到一片mondrian教程(http://alenzhai.iteye.com/blog/2158953),这里使用的就是olap4j的方式访问的,把代码copy下来之后进行修改,保持connection的参数和mdx语句不变,运行过之后能够得到相同的结果,只不过这种访问方式更加规范。附上源代码:
package mondrianTest;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
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.OlapWrapper;
import org.olap4j.Position;
import org.olap4j.metadata.Member;

public class Olap4jTest {		
	/**
	 * 获取连接Olap的连接
	 * @param url  连接Olap的URL
	 * @return
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public static OlapConnection getConnection(String url) throws ClassNotFoundException, SQLException{
		Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
		Connection connection = DriverManager.getConnection(url);
		OlapConnection olapConnection = connection.unwrap(OlapConnection.class);
		return olapConnection;
	}
	
	/**
	 * 获取查询的结构结果集
	 * @param mdx  mdx查询语句
	 * @param conn Olap连接
	 * @return
	 * @throws OlapException
	 */
	public static CellSet getResultSet(String mdx,OlapConnection conn) throws OlapException{
		OlapStatement statement = conn.createStatement();
		CellSet cellSet = statement.executeOlapQuery(mdx);
		return cellSet;
	}
	
	 public void testQuery(){			 	
		 OlapConnection connection = null;
		try {
			connection = getConnection("jdbc:mondrian:" + 
			        		"Jdbc=jdbc:mysql://10.241.20.157:3306/foodmart?user=root&password=root;" +
			        		"Catalog=C:\\Users\\Administrator\\Desktop\\nrtp\\FoodMart.xml;");
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

        String query = "SELECT  { [Measures].[Unit Sales] } on columns,{ [Time].[Year].[1997] } on rows FROM Sales  WHERE ([Customers].[State Province].[CA])";

        //获取查询结果
首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇AWR元数据的迁移或导入到其他数据.. 下一篇eclipse快捷键

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: