Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ArrayDescriptor在java中创建Oracle阵列类型时出现问题_Java_Spring_Oracle_Jdbc_Websphere - Fatal编程技术网

使用ArrayDescriptor在java中创建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

如果我正在与oracle建立直接连接,则代码工作正常。
但若我通过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