Java DSRA9110E:结果集已关闭
我们有一个Java类,它循环遍历一个结果集,该结果集包含存储信息,然后开始处理每个存储的ascii文件。每个存储处理ascii文件大约需要5分钟。我们遇到的问题是,在它处理第一个存储的ascii文件,然后获取下一个结果集之后,我们得到一个SQLException,上面写着“DSRA9110E:ResultSet已关闭” 我们的代码基本上是这样的Java DSRA9110E:结果集已关闭,java,informix,resultset,Java,Informix,Resultset,我们有一个Java类,它循环遍历一个结果集,该结果集包含存储信息,然后开始处理每个存储的ascii文件。每个存储处理ascii文件大约需要5分钟。我们遇到的问题是,在它处理第一个存储的ascii文件,然后获取下一个结果集之后,我们得到一个SQLException,上面写着“DSRA9110E:ResultSet已关闭” 我们的代码基本上是这样的 private void startProcess() throws Exception { PreparedStatement pstmt =
private void startProcess() throws Exception {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("SELECT STORE_CODE FROM STORE");
rs = pstmt.executeQuery();
while (rs != null && rs.next()) {
System.out.println("Processing store " + rs.getString("STORE_CODE"));
try {
processStoreSalesFile();
} catch (Exception e) {
conn.rollBack();
e.printStackTrace();
}
if (rs != null) {
System.out.println("ResultSet is not null");
}
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
}
}
当错误发生时,我确实看到系统打印行“ResultSet不为null”。但是当它得到下一个ResultSet时,它说ResultSet关闭了
我试图注释掉调用processStoreSalesFile()的代码,但我们没有得到这个错误,它能够在不引发任何异常的情况下获取下一个结果集
我尝试的下一个尝试是取消对processStoreSalesFile()方法的调用的注释,然后从文件系统中删除任何ascii文件,这样程序就不会有任何要处理的内容。也没有抛出异常
我们的设置是WebSphereInformix。我们有另一个WebSphereOracle设置,没有任何问题
我怀疑的是结果集有timedout,或者它只是不想等待进程完成并自行关闭
更新1:
在processStoreSalesFile()方法中,有一个conn.commit()调用来提交记录。是否在调用提交时,结果集将关闭?在WAS管理控制台上,我已经添加了值为“1”的数据源属性ResultSetTholdability。但结果集仍然是关闭的
我希望有人能在这里帮助我:(
谢谢。您可以使用pstmt.setQueryTimeout(秒)。请确保oracle驱动程序支持此功能。有关详细信息,请参阅
以下是我们所做的工作。最初,Websphere被配置为使用Informix JDBC驱动程序作为其数据源,因为我们正在连接到Informix数据库。我们将其更改为使用DB2 JCC驱动程序(由IBM Informix技术支持提出)然后在数据源自定义属性中,我们将'ResultHoldCapability'值设置为'1'(HOLD_CURSORS_OVER_COMMIT)。重新运行该程序,它成功地循环了结果集中的所有结果。我刚刚试过。我做了pstmt.setQueryTimeout(0)和pstmt.setQueryTimeout(1000)。我仍然收到错误:“[12/23/11 4:04:16:915 MYT]000000 17 SystemOut O com.ibm.websphere.ce.cm.ObjectClosedException:DSRA9110E:ResultSet已关闭。“连接可能已关闭。您能否本地化连接对象并重试。