我正在使用Apache Commons DBCP(commons-dbcp.jar
)連接池。
一旦我從池中獲得連接,它將被包裝在 類org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
中。
我的要求是將一個字符串數組傳遞給Oracle中的pl/sql存儲過程。
以下是我在下面的代碼片段是做:
Connection dbConn = ConnectionManager.ds.getConnection();
//The above statement returns me an connection wrapped in the class
//org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.
org.apache.commons.dbcp.DelegatingConnection del = new org.apache.commons.dbcp.DelegatingConnection(dbConn.getConnection());
con = del.getInnermostDelegate();
cs = con.prepareCall("call SP_NAME(?,?,?,?)");
oracle.sql.ArrayDescriptor arDesc= oracle.sql.ArrayDescriptor.createDescriptor("ARRAY_NAME", (OracleConnection) con);
CallableStatement c_stmt = conn.prepareCall("begin update_message_ids_ota
(:x); end;");
c_stmt.setArray(1, array_to_pass);
c_stmt.execute();
在執行上面的代碼,我得到以下異常:
java.lang.ClassCastException:org.apache .commons.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper無法轉換爲oracle.jdbc.OracleConnection at oracle.sql.ArrayDescriptor.createDescriptor
我試圖找到解決這個問題的途徑,幾乎遍佈整個網站和論壇,但無法得到滿意的答案或解決方案。
爲什麼你只用'dbConn'來打包它呢?如果直接在'dbConn'上調用'getInnermostDelegate',會發生什麼? – Thilo