2012-05-24 31 views
2

有沒有辦法從org.h2.jdbc.JdbcConnection獲得olap4j.OlapConnection從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); 

但我得到一個

Exception in thread "main" java.lang.ClassCastException: org.h2.jdbc.JdbcConnection cannot be cast to org.olap4j.OlapWrapper at 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); 

有了這樣的結果:

Exception in thread "main" java.lang.AbstractMethodError: org.h2.jdbc.JdbcConnection.unwrap(Ljava/lang/Class;)Ljava/lang/Object; at myprogram.main(Mondrian2H2Test.java:46)

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

回答

4

望着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); 
+0

這對我來說很合適。蒙德里安絕對可以傳遞空密碼。 –

+0

謝謝!我已經刪除了有關密碼的評論。 –