Tôi đang sử dụng Apache Commons DBCP (commons-dbcp.jar
) Hồ bơi kết nối.
Khi tôi nhận được kết nối từ hồ bơi, nó được gói trong lớp org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
.
Yêu cầu của tôi là chuyển một chuỗi các chuỗi tới pl/sql được lưu trữ trong Oracle.
Đây là những gì tôi đang làm trong đoạn mã sau:
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();
On thi đoạn mã trên, tôi nhận được ngoại lệ sau đây:
java.lang.ClassCastException: org.apache .commons.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper không thể truyền tới oracle.jdbc.OracleConnection tại oracle.sql.ArrayDescriptor.createDescriptor
Tôi đã cố gắng tìm ra giải pháp về vấn đề này trong hầu hết các trang web và diễn đàn, nhưng không thể có được câu trả lời hay giải pháp thỏa mãn.
Tại sao bạn lại quấn 'dbConn' chỉ để mở lại nó? Điều gì xảy ra nếu bạn gọi 'getInnermostDelegate' trực tiếp trên' dbConn'? – Thilo