无效操作,在结果集中执行另一条语句时关闭结果集
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
部分,这意味着您可以尝试在阅读期间直接更新您的条目。
如果有帮助请告诉我,否则我会删除答案以免造成混淆。
我正在从多个列中提取大量数据并将它们上传到 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
部分,这意味着您可以尝试在阅读期间直接更新您的条目。
如果有帮助请告诉我,否则我会删除答案以免造成混淆。