【问题标题】:Invalid operation, resultset is closed when executing another statement inside a resultset无效操作,结果集在执行结果集中的另一条语句时关闭
【发布时间】:2018-01-15 19:36:37
【问题描述】:

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

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

有可能做我想做的事吗?如果没有,是否有解决方法?

我正在使用 DB2 V10.5

【问题讨论】:

  • 将第一个查询的结果收集到Collection 中,并在一个单独的循环中迭代此Collection 进行更新。
  • @TimothyTruckle 我正在上传一个文档并从数据库中提取元数据。我为文档的每个循环获得 13 个属性。考虑到我的代码在 EOD 中运行,这可能会在运行时占用大量空间。有没有更有效的方法?
  • 您是profile您当前的实现还是您只是猜测您有内存问题?
  • @TimothyTruckle 我只是猜到了。 :D 无论如何,它是客户的机器。我现在正在研究收集方法。

标签: java sql db2 database-connection resultset


【解决方案1】:

乙炔

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

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

【讨论】:

  • 正是我需要的!我在查询中包含了我正在更新的列,并在同一结果集中对其进行了更新。谢谢!
  • @AldrylYakitMedrano 很高兴它有帮助。祝你的尝试好运。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多