无效操作,在结果集中执行另一条语句时关闭结果集

Invalid operation, resultset is closed when executing another statement inside a resultset

我正在从多个列中提取大量数据并将它们上传到 FileNet。上传后,我将从提取值的同一 table 更新一列。

while 循环

while(rs.next) {
    //get column1
    //get column2
    //etc.

    try {
        upload(datafromcol1, datafromcol2, datafromcol3);
        updateFlagSuccess(key);
    } catch (EngineRuntimeException e) {
        e.printStackTrace();
    }
}

setFlagSuccess 方法

public void setFlagSuccess(int key) throws SQLException {
    Statement statement = null;
    Connection con = null;
    String querySuccess = "UPDATE FROST_DMS SET STATUS = 'S' WHERE DOC_KEY = '" + key + "'";
    try {
        con = getConnection();
        Loggers.general().trace(LOG, "Query: {}", querySuccess);
        statement = con.createStatement();
        statement.executeUpdate(querySuccess);
        Loggers.general().trace(LOG, "Status flag updated");
    } catch (SQLException e) {
        con.close();
        e.printStackTrace();
    }
}

我认为当行 "statement = con.createStatement()" 执行时它会创建另一个 ResultSet 从而关闭前一个 ResultSet。但要求是在每次成功上传时更新状态标志。所以我必须在每次成功提取后更新一列。

我尝试的步骤:

1 - 我尝试从一开始就添加 conn.setAutoCommit(false),并在 while 循环之后通过 conn.commit(); 手动提交事务。这没有用。

2 - 我定义了另一个连接。在 while 循环中产生 ResulSet 的前一个 PreparedStatement 的连接变量是 conn。请注意方法 setFlagSuccess 中定义的另一个连接,即 con.

Is it possible to do what I am trying to do? And if not, is there a workaround?

我正在使用 DB2 V10.5

亚得力

看起来你可以使用滚动 ResultSet。关于它的更多信息,您可以阅读官方 oracle 网站上 Retrieving and Modifying Values from Result Sets 教程的 Updating Rows in ResultSet Objects 部分,这意味着您可以尝试在阅读期间直接更新您的条目。

如果有帮助请告诉我,否则我会删除答案以免造成混淆。