Я использую пул соединений Apache Commons DBCP (commons-dbcp.jar
).
Как только я получил соединение из пула, оно завернуто в класс org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
.
Мое требование - передать массив строк хранимой процедуре pl/sql в Oracle.
Вот что я делаю в следующем фрагменте кода:
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 в oracle.sql.ArrayDescriptor.createDescriptor
Я пытался найти решение по этому поводу почти на всех сайтах и форумах, но не смог получить удовлетворительного ответа или решения по этому поводу.
dbConn
только для того, чтобы развернуть его снова? Что произойдет, если вы вызоветеgetInnermostDelegate
непосредственно наdbConn
? - person Thilo   schedule 27.06.2011