在迭代ResultSet时更新行需要花费大量时间

时间:2015-01-14 10:09:51

标签: java oracle jdbc

我正在努力改进我写的数据传输程序。我正在寻找有关如何加快速度的建议。 我的程序通过填充ResultSet并将此结果写入文件来从数据库(通常是Oracle 11g)中提取数据。该程序定期查看表并查询特殊列是否已更改。例如,这可能是一个查询:

select columnA, columnB from scheme.table where changeColumn = '1'

现在是关键部分。提取数据后,我需要将此changeColumn更新为'0'。由于我刚刚使用ResultSet将数据导出到文件中,我必须将其倒回,因此代码如下所示:

extractedData.beforeFirst();
while (extractedData.next()) {
    extractedData.updateString("changeColumn", "0");
    extractedData.updateRow();
}

现在,如果此ResultSet更大(让其说超过100.000个条目),那么此循环可能需要数小时。有没有人对如何提高性能有任何建议? 我听说将获取大小设置为更大的值,但通常ResultSet只包含少于十几个条目。有没有办法动态设置提取大小?

1 个答案:

答案 0 :(得分:1)

使用JDBC批处理更新。从需要更新的所有行中,获取需要更新的行上的主键,将其添加到批量更新(SQL查询)并执行批处理。

Mkyong的一个很好的例子向您展示了如何使用JDBC PreparedStatement进行JDBC批处理更新。