【问题标题】:WSJDBCConnection does not wrap objects of type oracle.jdbc.OracleConnectionWSJDBCConnection 不包装 oracle.jdbc.OracleConnection 类型的对象
【发布时间】:2016-03-09 22:06:24
【问题描述】:

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

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 类中。巴维特。

我已经尝试了一大堆东西,但实际上这段代码应该可以正常工作。

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

但是,当我强迫自己拆开包装时,我得到:

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

环境正在运行 ojdbc14 和 JVM 6.0。在 WebSphere 中设置

第一次发帖,如果我搞砸了,我提前道歉。

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

【问题讨论】:

    标签: java oracle jdbc websphere websphere-7


    【解决方案1】:

    仔细检查您的配置。您的 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());
    

    【讨论】:

    • 非常感谢 aguibert 的回答,您巩固了我的怀疑,这与配置有关。现在,当我尝试元数据建议以确保我在 Oracle 上时,我确认配置正确指向 Oracle 驱动程序。所以那里没有骰子。经过几次尝试和错误。我查看了使用更大的 Oracle 驱动程序创建的备份目录。我将那个 .jar 换成较小的那个,然后繁荣......奏效了。所以我的 .jar 肯定不是正确的。
    • 啊,这是一个棘手的问题——metadata.getDriverName() 是否为两个 jar 报告了相同的 JDBC 驱动程序名称字符串?
    • 是的。实际上,WS 在发布 Web 应用程序时打印出元数据。我不想放手,因为所有 ojdbc.jar 文件都来自同事,我认为这些文件对他们有用……而且我不确定为什么不同的 .jar 会很重要。但我会很高兴问题得到解决。再次感谢!
    • 我在使用 postgresql 时遇到了同样的问题。 DSRA9122E: com.ibm.ws.rsadapter.jdbc.v41.WSJdbc41Connection@2dcfa36f does not wrap any objects of type org.postgresql.PGConnection.。而且我已经验证我正确使用了正确的 jar,而不是使用它的多个副本。元数据信息返回所有正确的值。但解包不起作用。我需要使用 PGConnection.getNotifications() 函数。有什么建议吗?
    • @Prachi 最好打开一个单独的问题,但我猜你需要在<application> 下定义一个共享的<classloader> 元素,以便应用程序可以共享相同的 JDBC驱动类加载器作为数据源
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多