Java weblogic.jdbc.wrapper.Array\u oracle\u sql\u数组不能强制转换为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(未知源) 代码: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(未知源) 代码: 有时,该连接作为本机
有时,该连接作为本机连接的包装返回,您需要将其展开:
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