使用ArrayDescriptor在java中创建Oracle阵列类型时出现问题
如果我正在与oracle建立直接连接,则代码工作正常。使用ArrayDescriptor在java中创建Oracle阵列类型时出现问题,java,spring,oracle,jdbc,websphere,Java,Spring,Oracle,Jdbc,Websphere,如果我正在与oracle建立直接连接,则代码工作正常。 但若我通过Websphere中配置的数据源连接到数据库,则会收到以下异常:- java.sql.SQLException:DSRA9122E: com.ibm.ws.rsadapter.jdbc。WSJdbcConnection@21cf8d56没有任何包装 oracle.jdbc.driver.OracleConnection类型的对象 引发此异常的代码如下所示:- ArrayDescriptor desc = ArrayDescript
但若我通过Websphere中配置的数据源连接到数据库,则会收到以下异常:- java.sql.SQLException:DSRA9122E: com.ibm.ws.rsadapter.jdbc。WSJdbcConnection@21cf8d56没有任何包装 oracle.jdbc.driver.OracleConnection类型的对象 引发此异常的代码如下所示:-
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(PROC_IN_PARAM_ALIAS, jdbcTemplate.getDataSource().getConnection()
.unwrap(OracleConnection.class));
你的错误说明一切- com.ibm.ws.rsadapter.jdbc。WSJdbcConnection@21cf8d56不包装任何oracle.jdbc.driver.OracleConnection类型的对象 createDescriptor()方法接受两个参数 1.存储过程名称 2.类型为oracle.jdbc.driver.OracleConnection的对象
ArrayDescriptor.createDescriptor("Proc Name", oracleConnection);
jdbcTemplate.getDataSource().getConnection()方法不会返回类型为oracle.jdbc.driver.OracleConnection的对象,并且在您尝试将其展开时,它会抛出错误
您需要执行以下操作
1.在配置文件中添加下面提到的条目
<beans:property name="accessToUnderlyingConnectionAllowed" value="true"/>
2.将
java.sql.Connection
转换为oracle.jdbc.OracleConnection
,并在createDescriptor()方法中使用该连接对象来创建您的oracle.sql.ArrayDescriptor对象。如果有人面临类似问题,使用Spring支持的从WSJdbcConnection获取本机连接:-
//Extract the native JDBC connection from WSJdbcConnection
WebSphereNativeJdbcExtractor connection = new WebSphereNativeJdbcExtractor();
//Getting the native connection
Connection con=connection.getNativeConnection(jdbcTemplate.getDataSource().getConnection());
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(PROC_IN_PARAM_ALIAS,
con.unwrap(OracleConnection.class));
请尝试
WebSphereNativeJdbcExtractor.doNativeCOnnection或WSCallHelper.getNativeConnection