使用ArrayDescriptor在java中创建Oracle ARRAY Type时出现问题

时间:2015-09-04 13:33:24

标签: java spring oracle jdbc websphere

如果我与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));

2 个答案:

答案 0 :(得分:0)

你的错误说明了一切 -

  

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对象。

答案 1 :(得分:0)

如果有人遇到类似问题,请使用Spring支持的WebSphereNativeJdbcExtractor从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));