java - AS400 DB 连接出错,下次调用时结果集数据未删除

标签 java websphere messagebroker

我尝试从 Java 计算节点连接到 AS400 DB,但出现错误。能否请您指教。

我的测试场景是:

  1. 我的代理流程每 9 秒触发一次,以在 AS400 DB 中运行选择和删除行

  2. 使用 JDBC_TransactionType.MB_TRANSACTION_AUTO 连接到 AS400 DB

    尝试{ //获取与AS400服务器的连接 if (conn == null) 尝试 { conn = getJDBCType4Connection("AS400db",JDBC_TransactionType.MB_TRANSACTION_AUTO); strSelectStoredProcName = (String)getUserDefinedAttribute("SelectStoredProcName"); 结果 = new CDBItaly_CoreSelectCustomerDetails().retrievePPWICustomerDetails(conn, strSelectStoredProcName);

        } catch (SQLException e) {
            //store any error code and description in the environment tree.
            mbElement.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "ErrorCode", CDBItalyErrorCodes.CDB_ITALY_0001.toString());
            mbElement.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "ErrorDesc", CDBItalyErrorCodes.CDB_ITALY_0001.getErrorDescription());
            catchTerminal.propagate(assembly);
        }
    

    } catch(异常e) {}

  3. 从 ResultSet 中获取行一次并获得正确的结果 - 好的

  4. 使用 rs.DeleterOW 删除表中的所有行,这意味着 ResultSet 下次不应返回任何内容。

  5. 尝试再次获取(现在应该返回 0 行)。但即使数据库表为空,它也会返回与步骤 2 完全相同的行。

  6. 如果我重新启动代理流程,它会再次正常工作。

现在,如果我按如下方式更改代码:

try {
    //get connection to the AS400 server            
    if (conn == null) {
        conn = getJDBCType4Connection("AS400db",JDBC_TransactionType.MB_TRANSACTION_AUTO);
    }

    try { 
        strSelectStoredProcName = (String)getUserDefinedAttribute("SelectStoredProcName");
        result =  new  CDBItaly_CoreSelectCustomerDetails().retrievePPWICustomerDetails(conn, strSelectStoredProcName);

    } catch (SQLException e) {
        //store any error code and description in the environment tree.
        mbElement.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "ErrorCode", CDBItalyErrorCodes.CDB_ITALY_0001.toString());
        mbElement.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "ErrorDesc", CDBItalyErrorCodes.CDB_ITALY_0001.getErrorDescription());
        catchTerminal.propagate(assembly);
} catch(Exception e){}                  

我收到错误:java.sql.SQLException 连接不存在

最佳答案

好的,所以在第一个示例中,因为没有任何花括号,所以如果 conn == null,则执行整个 try block 。

这意味着,如果您在查询本身未执行之前建立了连接,则结果变量将指向它在执行任何代码之前所做的任何操作。

在第二个示例中,我们可以看到 conn 查询正在执行,因为当您尝试使用连接时出现异常。我怀疑在这种情况下 conn 不等于 null,并且当您输入此代码时您已经引用了该连接。

所以我的猜测是,您设法缓存了对关闭连接的引用,因此出现了 SQLException 文本。我会尝试完全删除 if(conn == null) 条件并始终尝试获取连接。无论如何,代理都会为您管理和缓存这些连接。

关于java - AS400 DB 连接出错,下次调用时结果集数据未删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653982/

相关文章:

java - Struts1 ActionForm都是单例的,如果是的话,不同的请求属性是如何存储的

java - 数据库连接工厂 : error getting dbconnection jdbc/dotCMSPool

messagebroker - NATS 是否水平扩展(吞吐量)

architecture - 邮件队列和邮件代理的区别

java - Facebook Messenger Android Sdk 共享 setExternalUri

java - 可以使用 FloatingActionButton 而不会出现延迟吗?

java - Websphere 是用 Java 编写的吗?它在 JVM 中运行得这么快吗?

java - 如何在基于 Tomcat FORM 的身份验证中使用对 j_security_check 的 HTTP POST 请求触发重新登录

java - 为什么 ResourceBundle.getBundle(String str) 无法从 Websphere 中的默认属性文件中找到值

java - 如何在 Spring Boot 中单独修改 channel 内每个接收者的每个代理消息?