Java weblogic.jdbc.wrapper.Array\u oracle\u sql\u数组不能强制转换为oracle.sql.Array

Java weblogic.jdbc.wrapper.Array\u oracle\u sql\u数组不能强制转换为oracle.sql.Array,java,oracle,jdbc,weblogic12c,classcastexception,Java,Oracle,Jdbc,Weblogic12c,Classcastexception,我是weblogic中面临的一个错误: java.lang.ClassCastException:weblogic.jdbc.wrapper.Array\U oracle\U sql\U Array无法强制转换为weblogic.jdbc.wrapper.CallableStatement\U oracle\U jdbc\U driver\U OracleCallableStatementWrapper.getARRAY上的oracle.sql.Array(未知源) 代码: 有时,该连接作为本机

我是weblogic中面临的一个错误:

java.lang.ClassCastException:weblogic.jdbc.wrapper.Array\U oracle\U sql\U Array无法强制转换为weblogic.jdbc.wrapper.CallableStatement\U oracle\U jdbc\U driver\U OracleCallableStatementWrapper.getARRAY上的oracle.sql.Array(未知源)

代码:


有时,该连接作为本机连接的包装返回,您需要将其展开:

conn = new CommonsDbcpNativeJdbcExtractor().getNativeConnection(conn);
OracleConnection oConn;
if ( conn.isWrapperFor( OracleConnection.class ) )
{
  oConn = (OracleConnection) conn.unwrap( OracleConnection.class );
}
else
{
  oConn = (OracleConnection) conn;
}
或者,根据,您可以获得底层可调用语句(而不是包装语句):

另一个可能的解决方案是不使用中间变量,只需执行以下操作:

returnArray = (String[]) ((OracleCallableStatement)cstmt).getARRAY(6).getArray();
更新

基于此,您还可以尝试:

ARRAY mainArray = (ARRAY) ((weblogic.jdbc.wrapper.Array) (callableStmt).getObject(3))
                              .unwrap(ARRAY.class);

有时,该连接作为本机连接的包装返回,您需要将其展开:

conn = new CommonsDbcpNativeJdbcExtractor().getNativeConnection(conn);
OracleConnection oConn;
if ( conn.isWrapperFor( OracleConnection.class ) )
{
  oConn = (OracleConnection) conn.unwrap( OracleConnection.class );
}
else
{
  oConn = (OracleConnection) conn;
}
或者,根据,您可以获得底层可调用语句(而不是包装语句):

另一个可能的解决方案是不使用中间变量,只需执行以下操作:

returnArray = (String[]) ((OracleCallableStatement)cstmt).getARRAY(6).getArray();
更新

基于此,您还可以尝试:

ARRAY mainArray = (ARRAY) ((weblogic.jdbc.wrapper.Array) (callableStmt).getObject(3))
                              .unwrap(ARRAY.class);

通过添加以下代码,问题已得到解决:

           try {
        statement.setLong(1, new Long(1));
        statement.registerOutParameter(2, Types.ARRAY, "TNUMBERTABLE");
        statement.execute();
        ARRAY ar = null;
        Object someArray = statement.getArray(2);
        if (someArray instanceof weblogic.jdbc.wrapper.Array)
            ar =
      (oracle.sql.ARRAY(((weblogic.jdbc.wrapper.Array)someArray).unwrap(Class.forName("oracle.sql.ARRAY")));
        else
            ar = (oracle.sql.ARRAY)someArray;

        for (long i : ar.getLongArray()) {
            //code if needed
        }

    } 

您可以查看此链接:

添加以下代码后问题已得到解决:

           try {
        statement.setLong(1, new Long(1));
        statement.registerOutParameter(2, Types.ARRAY, "TNUMBERTABLE");
        statement.execute();
        ARRAY ar = null;
        Object someArray = statement.getArray(2);
        if (someArray instanceof weblogic.jdbc.wrapper.Array)
            ar =
      (oracle.sql.ARRAY(((weblogic.jdbc.wrapper.Array)someArray).unwrap(Class.forName("oracle.sql.ARRAY")));
        else
            ar = (oracle.sql.ARRAY)someArray;

        for (long i : ar.getLongArray()) {
            //code if needed
        }

    } 

您可以查看此链接:

数据源中的一个简单参数更改应该可以使其正常工作

转到数据源->选择数据源->配置->连接池->高级,然后取消选中“包装数据类型”


这应该可以解决问题。

数据源中的一个简单参数更改应该可以使其正常工作

转到datasource->选择datasource->Configuration->Connection Pool->Advanced,然后取消选中“Wrap Data type”


这应该可以解决问题。

发布错误消息和代码很好,如果你知道它可能是什么,也可以发布。发布错误消息和代码很好,如果你知道它可能是什么,也可以发布。在我的情况下,这些都不起作用。仍然面临同样的错误:weblogic.jdbc.wrapper.Array\u oracle\u sql\u Array无法强制转换为oracle.sql.Array在我的案例中,其中一个是有效的。仍然面临相同的错误:weblogic.jdbc.wrapper.Array\u oracle\u sql\u Array无法强制转换为oracle.sql.Array