gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:47:00 25 4
gpt4 key购买 nike

我尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com