这个是查询MDX中出现的错误了,这说明前面的连接mysql,解析xml文件的操作都执行成功了,根据错误提示发现MsgBusi不存在,查看xml文件发现这个MsgBusi的确不存在,这才想起来,原来down下来的代码和我用的逻辑模型的定义不是同一个,我这里用的是mondrian提供的一个示例foodmart,所以我应该用我这里的逻辑模型定义的立方体和维度等进行查询。所以需要修改一下MDX语句,经过多次测试之后发现这样的语句能够在当前的配置中跑出结果:SELECT { [Measures].[Unit Sales] } on columns,{ [Time].[Year].[1997] } on rows FROM Sales WHERE ([Customers].[State Province].[CA]),跑出的结果如下:
Axis #0:
{[Customers].[USA].[CA]}
Axis #1:
{[Measures].[Unit Sales]}
Axis #2:
{[Time].[1997]}
Row #0: 74,748
Exception in thread "main" java.lang.NoSuchMethodError: mondrian.resource.MondrianResource.getThreadOrDefaultLocale()Ljava/util/Locale; at mondrian.resource.MondrianResource.instance(MondrianResource.java:29) at mondrian.rolap.aggmatcher.AggTableManager.(AggTableManager.java:54) at mondrian.rolap.RolapSchema. (RolapSchema.java:194) at mondrian.rolap.RolapSchema. (RolapSchema.java:216) at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:214) at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:66) at mondrian.rolap.RolapConnection. (RolapConnection.java:160) at mondrian.rolap.RolapConnection. (RolapConnection.java:90) at mondrian.olap.DriverManager.getConnection(DriverManager.java:112) at mondrian.olap.DriverManager.getConnection(DriverManager.java:68) at mondrian.olap.DriverManager.getConnection(DriverManager.java:50) at mondrianTest.TestMDX.testQuery(TestMDX.java:13) at mondrianTest.TestMDX.main(TestMDX.java:38)
妈的,找不到这个函数,真是奇怪了,这个包也存在,包里面也有这个类,为什么偏偏就没有这个函数呢?!这就是java比较烦人的地方,在C/C++里面编译期间必须能够找到所有的函数定义,虽然有些函数的实现没有找到,在装载的时候也会首先进行动态链接,而不会在执行的时候再进行,但是JAVA这种只有在使用的时候再进行load的方式就很可能出现这种动态的错误,例如找不到class、找不到method等等,这个问题查了半天也没有能够找出错误,最后是在没有办法了采取最后的方法:查看源码。幸亏有grepCode这样的网站,真的是让查看java源代码方便了不知道多少个数量级,俗话说:源码在手,了无秘密。有了源码,什么问题都不在是问题了,在grepcode中查找mondrian.resource.MondrianResource这个类,发现在mondrian中只有3.6.7之前的版本才有,所以又不得不切换回3.6.x版本,这里我用的是3.6.1版本,换了jar包之后发现这个错误还是存在,好吧,看下代码吧。 在代码中,的确是Mon