JBoss数据源连接不能创建存储过程数组输入参数

时间:2026-02-24 05:05:55

1、从Datasource获取connection后,一般会用以下方式创建ARRAY输入数组参数:

JBoss数据源连接不能创建存储过程数组输入参数

2、但是这样会抛ClassCastException, 这是因为Datasource返回的是一个OracleConnection Wrapper,而ArrayDescription需要一个oracle.jdbc.OracleConnection.

JBoss数据源连接不能创建存储过程数组输入参数

3、按照过往的经验,Wrapper的underlying connection就是oracle.jdbc.OracleConnection的之类或实现:

JBoss数据源连接不能创建存储过程数组输入参数

4、但是这里往往会报奇怪的java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 cannot be cast to org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6。

其原因比较复杂,很可能是JBoss本身ClassLoader所load的WrappedConnectionJDK6不是程序ClassLoader load的WrappedConnectionJDK6。

同样的问题会出现在把underlying connection转型成oracle.jdbc.OracleConnection的时候。

JBoss数据源连接不能创建存储过程数组输入参数

5、在ojdbc7中其实ArrayDescriptor和ARRAY类已经被废除,取而代之的是connection.createARRAY方法。但是我们不能直接调用,而是要通过反射机制调用getUnderlyingConnection()方法和createARRAY()方法,从而创建存储过程的数组输入参数。

JBoss数据源连接不能创建存储过程数组输入参数

© 2026 乐乐经验网
信息来自网络 所有数据仅供参考
有疑问请联系站长 site.kefu@gmail.com