我有一个POJO列表,我想传递给Oracle存储过程,然后在存储的proc中循环该列表并运行更新语句
我尝试使用结构描述符,但由于我的连接对象,我不断收到异常
(java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 cannot be cast to oracle.jdbc.OracleConnection)
public void MyMethod(List<myObject> myObjectList) {
private Connection con = null;
private CallableStatement stmt = null;
try {
con = getConnection();
String query = "{call "+getStoredProcedureName()+"(?)}";
stmt.setArray(1, myObjectList);
stmt = con.prepareCall(query);
stmt.execute();
} catch(Exception e) {
throw e;
}
}
在甲骨文中
create or replace TYPE "MY_REC" AS OBJECT
(
field_one varchar2(50),
field_two varchar2(100)
);
create or replace TYPE "MY_REC_T" AS TABLE OF MY_REC;
我希望将 myObjectList 传递给我的存储过程
使用其他连接包装器(不是 jboss(,我不得不解开连接以获取底层OracleConnection
:
Connection connection = getConnection();
if ( !connection.isWrapperFor( OracleConnection.class ) )
{
// throw exception
}
OracleConnection oConnection = (OracleConnection) connection.unwrap( OracleConnection.class );
JBoss 文档和这个答案也建议你可以使用:
WrappedConnection wrapped = (WrappedConnection) getConnection();
OracleConnection oConnection = (OracleConnection) wrapped.getUnderlyingConnection();
之后,关于如何将Java数组传递给Oracle SQL还有多个其他答案[1] [2] [3]