JBoss数据源连接不能创建存储过程数组输入参数的解决方法
在使用JBoss Datasource获取connection并为Oracle存储过程创建数组输入参数时,有时会遇到的问题。本文将介绍一种基于ojdbc7的反射机制解决方法。
获取Connection和创建Array输入参数
通常我们从Datasource获取connection后,会使用如下方式创建ARRAY输入数组参数:
```
ArrayDescriptor descriptor ("ARRAY_TYPE", connection.unwrap());
ARRAY array new ARRAY(descriptor, connection.unwrap(), inputArray);
```
然而,由于Datasource返回的是一个OracleConnection Wrapper,而ArrayDescriptor需要一个,因此会抛出ClassCastException。
解决ClassCastException问题
根据以往经验,我们可以通过获取Wrapper的underlying connection来获得的实例。但是在某些情况下,会报 cannot be cast to 的奇怪错误。这个问题的原因比较复杂,可能是由于JBoss本身ClassLoader加载了不同版本的WrappedConnectionJDK6。
使用反射机制创建存储过程数组输入参数
在ojdbc7中,ArrayDescriptor和ARRAY类已被废除,取而代之的是方法。但是我们不能直接调用这个方法,而是需要通过反射机制调用getUnderlyingConnection()方法和createARRAY()方法来创建存储过程的数组输入参数。
解决方法步骤
1. 通过反射获取connection对象的underlying connection。
2. 使用反射调用underlying connection的createARRAY方法,传入相应的参数以创建存储过程的数组输入参数。
通过以上步骤,我们可以成功创建存储过程的数组输入参数,避免了ClassCastException等问题。
总结:
本文介绍了在使用JBoss Datasource获取connection并为Oracle存储过程创建数组输入参数时可能遇到的问题,并提供了一种基于ojdbc7的反射机制解决方法。通过该方法,我们可以顺利地创建存储过程的数组输入参数,提高了代码的稳定性和可靠性。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。