我試圖連接到運行在WebSphere上的Java應用程序內的Oracle數據庫。我需要能夠創建一個數組描述符用於調用過程。獲取oracle.jdbc.driver.LogicalConnection,需要oracle.jdbc.OracleConnection
的代碼看起來是這樣的:
Connection conn=null;
ArrayDescriptor arrayDescriptor;
Connection tmpCon = jdbcTemplate.getDataSource().getConnection();
conn = WSCallHelper.getNativeConnection(tmpCon);
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",conn);
IDs = new oracle.sql.ARRAY(arrayDescriptor, conn, list.toArray());
調用ArrayDescriptor.createDescriptor
線罰中一類轉換異常
java.lang.ClassCastException: oracle.jdbc.driver.LogicalConnection incompatible with oracle.jdbc.OracleConnection at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:149) at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:115)
通過這個走與調試,我可以看到,conn
絕對是一個oracle.jdbc.driver.LogicalConnection
。問題是在我的代碼,我不能實際引用LogicalConnection
因爲這個類不是公共的,所以我不能只是做這樣的事情:
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",((LogicalConnection)conn).getWrapper());
。
這:
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",((oracle.jdbc.driver.OracleConnection)conn).getWrapper());
也返回一個類轉換異常:
java.lang.ClassCastException: oracle.jdbc.driver.LogicalConnection incompatible with oracle.jdbc.driver.OracleConnection
我需要有一個OracleConnection
對象,但我似乎無法得到一個從獲取LogicalConnection
回到我身邊。有沒有人見過這個?我覺得我在這裏錯過了一些非常明顯的東西,但也許我只是需要另一杯咖啡......
一些谷歌命中暗示不兼容的驅動程序可能會導致這種情況。你的WebSphere設置中是否有早期版本的ojdbc版本,或者在你的類路徑中的某處,還是在應用程序中打包了? –
@AlexPoole:有趣的想法。我不認爲我有一個不同版本的ojdbc庫,但我會看看。除非我開始編寫代碼手動將數組傳遞給過程,否則應用程序可以正常工作。 – FrustratedWithFormsDesigner
@AlexPoole:看起來你是對的! – FrustratedWithFormsDesigner