DSRA9110E:ResultSet已关闭

时间:2011-12-22 04:01:39

标签: java informix resultset

我们有一个Java类,它循环遍历包含Store信息的结果集,然后开始处理每个相应商店的ascii文件。对于每个要处理的商店,ascii文件大约需要5分钟。我们遇到的问题是在它处理第一个商店的ascii文件然后获取下一个结果集之后,我们得到一个SQLException,说“DSRA9110E:ResultSet已关闭”。

我们的代码基本上就是这样。

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不为空”。但是当它获得下一个ResultSet时,它表示ResultSet已关闭。

我试图注释掉调用processStoreSalesFile()的代码,但是我们没有得到这个错误,它能够获取下一个ResultSet而不会抛出任何异常。

我尝试的下一次尝试是取消对方法processStoreSalesFile()的调用,然后从文件系统中删除任何ascii文件,以便程序无需处理。并且也没有例外。

我们的设置是WebSphere-Informix。我们有另一个设置WebSphere-Oracle并且没有任何问题。

我怀疑的是ResultSet有timedout,或者它只是不想等待进程完成并自行关闭。

更新1: 在processStoreSalesFile()方法中,有一个conn.commit()调用来提交记录。是否在调用commit时,ResultSet将被关闭?在WAS管理控制台,我已经添加了值为'1'的数据源属性resultSetHoldability。但是ResultSet仍然关闭。

我希望有人可以帮助我:(

感谢。

2 个答案:

答案 0 :(得分:2)

以下是我们所做的工作。最初,Websphere配置为使用Informix JDBC驱动程序作为其数据源,因为我们连接到Informix数据库。我们将其更改为使用DB2 JCC Driver(由IBM Informix技术支持提出),然后在数据源定制属性中,我们将'resultHoldability'值设置为'1'(HOLD_CURSORS_OVER_COMMIT)。重新运行程序,它设法循环遍历结果集中的所有结果。

答案 1 :(得分:1)

您可以使用pstmt.setQueryTimeout(秒)。确保oracle驱动程序支持此功能。更多细节 here