我尝试从 Java 计算节点连接到 AS400 DB
,但出现错误。能否请您指教。
我的测试场景是:
我的代理流程每 9 秒触发一次,以在
AS400 DB 中运行选择和删除行
使用
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) {}
从 ResultSet 中获取行一次并获得正确的结果 - 好的
使用 rs.DeleterOW 删除表中的所有行,这意味着 ResultSet 下次不应返回任何内容。
尝试再次获取(现在应该返回 0 行)。但即使数据库表为空,它也会返回与步骤 2 完全相同的行。
如果我重新启动代理流程,它会再次正常工作。
现在,如果我按如下方式更改代码:
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/