WSJDBCConnection不包装oracle.jdbc.OracleConnection类型的对象

时间:2015-12-04 21:04:04

标签: java oracle jdbc websphere websphere-7

我看到一个类似的问题:

Issue while creating Oracle ARRAY Type in java using ArrayDescriptor

但是我的问题是团队中的其他程序员使用相同的代码,显然它对他们来说很好。

    Connection conn = null;
    Connection oracleConn = null;
    CallableStatement stmt = null;
    try {

        conn = this.getDataSource().getConnection();
        if ( conn.isWrapperFor(oracle.jdbc.OracleConnection.class)) {
            oracleConn = conn.unwrap(oracle.jdbc.OracleConnection.class);
        }

我没有开发这个代码,我发现他们将OracleConnection展开到常规的Connection类中很奇怪。 Bawwwt。

我已尝试过一大堆东西,但实际上这段代码应该按原样运行。

现在上面的代码稍后在调用预准备语句时生成空指针,因为if语句永远不会触发。我从来没有在if语句中加入,

然而,当我强迫自己做一个解缠时,我得到了:

java.sql.SQLException:DSRA9122E:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@35c735c7不包装oracle.jdbc.OracleConnection类型的任何对象

环境正在运行ojdbc14和JVM 6.0。在WebSphere中安装

第一次发布海报,所以如果我搞砸了,我会提前道歉。

修改从不重要的代码中删除了两个变量

1 个答案:

答案 0 :(得分:0)

仔细检查您的配置。您的DataSource不能像您认为的那样指向Oracle DB。我测试了您的代码,如果您的DataSource真正指向Oracle数据库,它将会起作用。

isWrapperFor()方法试图告诉您Connection没有包装OracleConnection,这也与异常消息告诉您的内容一致。

您可以检查数据源产品信息,如下所示:

DatabaseMetaData metadata = conn.getMetaData();
System.out.println("DB product:  " + metadata.getDatabaseProductName());
System.out.println("JDBC Driver: " + metadata.getDriverName());