繁体   English   中英

使用ArrayDescriptor在Java中创建Oracle ARRAY类型时出现问题

[英]Issue while creating Oracle ARRAY Type in java using ArrayDescriptor

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM