我试图从Java计算节点连接到AS400 DB
,但得到错误。你能告诉我吗?
我的代理流每9秒触发一次,在
AS400 DB
中运行一个select和delete行用
JDBC_TransactionType.MB_TRANSACTION_AUTO
接AS400 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) {}
从ResultSet中获取行一次并得到正确的结果- OK
使用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块都会被执行。
这意味着如果你在查询本身没有被执行之前有一个连接,那么结果变量将指向它在执行任何代码之前所做的任何事情。
在第二个示例中,我们可以看到conn查询正在执行,因为当您尝试使用连接时遇到异常。我怀疑在这种情况下,conn不等于null,并且当您输入此代码时已经有对连接的引用。
所以我的猜测是,你是设法缓存一个连接的引用关闭,因此SQLException文本。我会尝试完全删除if(conn == null)条件,并总是试图获得连接。Broker将为您管理和缓存这些连接。