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



我试图从Java计算节点连接到AS400 DB,但得到错误。你能告诉我吗?

我的测试场景是:
  1. 我的代理流每9秒触发一次,在AS400 DB

  2. 中运行一个select和delete行
  3. JDBC_TransactionType.MB_TRANSACTION_AUTOAS400 DB

    {试//与AS400服务器建立连接If (conn == null)尝试{conn = getJDBCType4Connection("AS400db",JDBC_TransactionType.MB_TRANSACTION_AUTO);strSelectStoredProcName = (String)getUserDefinedAttribute("SelectStoredProcName");result = new CDBItaly_CoreSelectCustomerDetails()。retrievePPWICustomerDetails(康涅狄格州,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) {}

  4. 从ResultSet中获取行一次并得到正确的结果- OK

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

  6. 尝试再次抓取(现在它应该返回0行)。但是它返回的行与第2步完全相同,即使数据库表是空的。

  7. 如果我重新启动代理流,它可以正常工作。

现在如果我改变代码如下:

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块都会被执行。

这意味着如果你在查询本身没有被执行之前有一个连接,那么结果变量将指向它在执行任何代码之前所做的任何事情。

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

所以我的猜测是,你是设法缓存一个连接的引用关闭,因此SQLException文本。我会尝试完全删除if(conn == null)条件,并总是试图获得连接。Broker将为您管理和缓存这些连接。

最新更新