【问题标题】:How to pass java list of objects to oracle stored procedure (Cannot use Spring)如何将java对象列表传递给oracle存储过程(不能使用Spring)
【发布时间】:2019-12-03 03:11:25
【问题描述】:

我有一个 POJO 列表,我想将其传递给 Oracle 存储过程,然后在存储过程中循环遍历该列表并运行更新语句

我尝试使用 StructDescriptor,但由于我的连接对象,我不断收到异常

(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 传递给我的存储过程

【问题讨论】:

  • 你能告诉我们getConnection是做什么的吗?我找不到通过 JBoss 连接将 Java 对象数组传递给 Oracle 存储过程的地址的答案。看来您将不得不使用与oracle.jdbc.OracleConnection 兼容的东西。

标签: java sql oracle


【解决方案1】:

与其他连接包装器(不是 jboss)一起工作,我不得不解开连接以获取底层 OracleConnection

Connection connection = getConnection();
if ( !connection.isWrapperFor( OracleConnection.class ) )
{
  // throw exception
}
OracleConnection oConnection = (OracleConnection) connection.unwrap( OracleConnection.class );

JBoss documentationthis answer 还建议您可以使用:

WrappedConnection wrapped = (WrappedConnection) getConnection();
OracleConnection oConnection = (OracleConnection) wrapped.getUnderlyingConnection();

之后,关于如何将 Java 数组传递给 Oracle SQL [1] [2] [3],还有多个其他答案

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2012-06-04
    • 2011-10-23
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多