DSRA9110E: 结果集已关闭
Posted
技术标签:
【中文标题】DSRA9110E: 结果集已关闭【英文标题】:DSRA9110E: ResultSet is closed 【发布时间】:2011-12-22 04:01:39 【问题描述】:我们有一个 Java 类,它遍历包含 Store 信息的结果集,然后开始为每个相应的 Store 处理 ascii 文件。每个商店处理 ascii 文件大约需要 5 分钟。我们遇到的问题是在它处理了第一个商店的 ascii 文件然后获取下一个结果集之后,我们得到一个 SQLException 说“DSRA9110E: ResultSet is closed”。
我们的代码基本上是这样的。
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 is not null”。但是当它得到下一个 ResultSet 时,它说 ResultSet 已关闭。
我尝试注释掉调用 processStoreSalesFile() 的代码,但我们没有收到此错误,它能够获取下一个 ResultSet 而不会引发任何异常。
我尝试的下一个尝试是取消对方法 processStoreSalesFile() 的调用的注释,然后从文件系统中删除所有 ascii 文件,这样程序就没有什么要处理的了。也没有抛出异常。
我们的设置是 WebSphere-Informix。我们有另一个设置 WebSphere-Oracle,没有任何问题。
我怀疑是 ResultSet 已超时,或者它只是不想等待进程完成并自行关闭。
更新 1: 在 processStoreSalesFile() 方法中,有一个 conn.commit() 调用来提交记录。是在调用提交时,ResultSet 将被关闭吗?在 WAS 管理控制台中,我已经添加了值为“1”的数据源属性 resultSetHoldability。但是 ResultSet 仍然是关闭的。
我希望有人可以在这里帮助我:(
谢谢。
【问题讨论】:
【参考方案1】:这是我们所做的工作。最初,Websphere 被配置为使用 Informix JDBC 驱动程序作为其数据源,因为我们要连接到 Informix 数据库。我们将其更改为使用 DB2 JCC 驱动程序(由 IBM Informix 技术支持提出),然后在数据源定制属性中,我们将“resultHoldability”值设置为“1”(HOLD_CURSORS_OVER_COMMIT)。重新运行程序,它设法遍历了结果集中的所有结果。
【讨论】:
【参考方案2】:您可以使用 pstmt.setQueryTimeout(seconds)。确保 oracle 驱动程序支持这一点。了解更多详情 here
【讨论】:
我刚试过。我做了 pstmt.setQueryTimeout(0) 和 pstmt.setQueryTimeout(1000)。我仍然收到错误消息:“[12/23/11 4:04:16:915 MYT] 00000017 SystemOut O com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: ResultSet is closed。” 连接可能已关闭。您能否本地化连接对象并重试。以上是关于DSRA9110E: 结果集已关闭的主要内容,如果未能解决你的问题,请参考以下文章
Jsp--java.sqlsqlException结果集已耗尽
oracle数据库java.sql.SQLException: 结果集已耗尽,总是跳不出while(rs.next())循环,请求高手帮忙解决!
java连接Oracle数据库,从ResultSet中提取数据出现java.sql.sqlException结果集已耗尽