Java DSRA9110E:结果集已关闭

Java DSRA9110E:结果集已关闭,java,informix,resultset,Java,Informix,Resultset,我们有一个Java类,它循环遍历一个结果集,该结果集包含存储信息,然后开始处理每个存储的ascii文件。每个存储处理ascii文件大约需要5分钟。我们遇到的问题是,在它处理第一个存储的ascii文件,然后获取下一个结果集之后,我们得到一个SQLException,上面写着“DSRA9110E:ResultSet已关闭” 我们的代码基本上是这样的 private void startProcess() throws Exception { PreparedStatement pstmt =

我们有一个Java类,它循环遍历一个结果集,该结果集包含存储信息,然后开始处理每个存储的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不为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已关闭。“连接可能已关闭。您能否本地化连接对象并重试。