如何将 java 对象列表传递给 oracle 存储过程(不能使用 Spring)



我有一个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]

最新更新