Apache Commons DBCP ( commons-dbcp.jar
) 接続プールを使用しています。
プールから接続を取得すると、それは class にラップされ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.sql.ArrayDescriptor.createDescriptor で oracle.jdbc.OracleConnection にキャストできません
ほとんどのサイトやフォーラムで解決策を見つけようとしましたが、満足のいく答えや解決策を得ることができませんでした。