无效的操作,在结果集

时间:2018-01-15 19:36:38

标签: java sql db2 database-connection resultset

我从许多列中提取了大量数据并将它们上传到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 - 我定义了另一个连接。在PreparedStatement循环中生成ResulSet的上一个while的连接变量为conn。请注意方法setFlagSuccess中定义的另一个连接,即con

  

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

我正在使用DB2 V10.5

1 个答案:

答案 0 :(得分:0)

Aldryl

看起来您可以使用滚动的ResultSet。有关它的更多信息,您可以在官方oracle网站的Updating Rows in ResultSet Objects部分 chart: { type: 'arearange', plotBorderColor: '#000000', plotBorderWidth: 2, margin: [15, 15, 15, 15], spacing: [15, 15, 15, 15], }, 教程中阅读,这意味着您可以在阅读期间直接更新您的参赛作品。

如果有帮助请告诉我,否则我会删除不要混淆的答案。