2016 - 2024

感恩一路有你

JBoss数据源连接不能创建存储过程数组输入参数的解决方法

浏览量:3070 时间:2024-01-12 10:08:15 作者:采采

在使用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的反射机制解决方法。通过该方法,我们可以顺利地创建存储过程的数组输入参数,提高了代码的稳定性和可靠性。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。