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

WSJDBCConnection does not wrap objects of type oracle.jdbc.OracleConnection

我看到有人问过类似的问题:

但是我的问题是团队中的其他编码人员正在使用相同的代码,显然它对他们来说工作正常。

    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 展开为常规连接很奇怪 class。 Bawwt.

我已经尝试了很多东西,但实际上这段代码应该按原样工作。

现在上面的代码稍后会在调用准备好的语句时生成一个空指针,因为 if 语句永远不会触发。我从来没有在 if 语句中做到这一点,

然而,当我强迫自己展开时,我得到:

java.sql.SQLException:DSRA9122E:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@35c735c7 不包装 oracle.jdbc.OracleConnection

类型的任何对象

环境是运行ojdbc14和JVM 6.0。 WebSphere 中的设置

第一次发帖,如有不妥之处敬请见谅

编辑从代码中删除了两个无关紧要的变量

仔细检查您的配置。您的数据源不能像您认为的那样指向 Oracle 数据库。我测试了您的代码,如果您的 DataSource 确实指向 Oracle DB,它就会工作。

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

您可以这样查看数据源产品信息:

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