从 org.h2.jdbc.JdbcConnection 获取 olap4j.OlapConnection

Posted

技术标签:

【中文标题】从 org.h2.jdbc.JdbcConnection 获取 olap4j.OlapConnection【英文标题】:Get a olap4j.OlapConnection from a org.h2.jdbc.JdbcConnection 【发布时间】:2012-05-24 16:00:33 【问题描述】:

有没有办法从org.h2.jdbc.JdbcConnection 获得olap4j.OlapConnection

现在我正在尝试这个(如图所示there):

Class.forName("org.h2.Driver");
Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test;", "sa", "");
OlapWrapper wrapper = (OlapWrapper) conn;
OlapConnection olapConn = wrapper.unwrap(OlapConnection.class);

但我得到了一个

线程“主”java.lang.ClassCastException 中的异常: org.h2.jdbc.JdbcConnection 不能转换为 org.olap4j.OlapWrapper 在 myprogram.main(Mondrian2H2Test.java:67)

:67 是OlapWrapper wrapper = (OlapWrapper) conn;

编辑:

我也试过这个:

Class.forName("org.h2.Driver");
Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test;", "sa", "");
OlapConnection olapConn = conn.unwrap(OlapConnection.class);

有了这个结果:

线程“主”java.lang.AbstractMethodError 中的异常: org.h2.jdbc.JdbcConnection.unwrap(Ljava/lang/Class;)Ljava/lang/Object; 在 myprogram.main(Mondrian2H2Test.java:46)

:46 是 OlapConnection olapConn = conn.unwrap(OlapConnection.class);

【问题讨论】:

【参考方案1】:

查看MondrianOlap4jDriver javadocs和mailing list,代码似乎是:

import java.sql.Connection;
import java.sql.DriverManager;
import org.olap4j.OlapConnection;

Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
Connection conn = DriverManager.getConnection(
    "jdbc:mondrian:" + 
    "Jdbc=jdbc:h2:~/test; " +
    "JdbcUser=sa; " +
    "JdbcPassword=; " +
    "Catalog=file:/mondrian/demo/FoodMart.xml; " +
    "JdbcDrivers=org.h2.Driver");
OlapConnection olapConn = conn.unwrap(OlapConnection.class);

【讨论】:

这对我来说是正确的。蒙德里安绝对可以传递空密码。

以上是关于从 org.h2.jdbc.JdbcConnection 获取 olap4j.OlapConnection的主要内容,如果未能解决你的问题,请参考以下文章

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?

从PRISM开始学WPFPrism?

mysql 主-主-从-从