【发布时间】: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