0

我将获得一个临时表,我运行一个进程将数据加载到一个更大的表中,并从临时表中删除数据。临时表中的某些行表示删除主表中的行。

目前算法如下:

ResultSet dataToLoad = select * from ...;
ResultSet mainTable = select * from ...;

while (dataToLoad.next())
{
     if(insert)
         //insert this row into main table, and remove row from this table
     else if(delete)
         //Find the row that matches in the main table and delete it. remove row from this table
}

我的问题是删除块。最好创建一个新的 ResultSet 以使用 where 查找行并删除集合中的单行,还是将游标放在开头并循环遍历游标检查条件?本质上就像在 java 代码中实现 where 子句。

加载 ResultSet 时 JDBC 缓存多少?它会为每个光标跳转做一次完整的网络往返吗?

最后,我简要阅读了万圣节问题。我在这里有风险吗?

4

1 回答 1

1

为什么不尝试加载插入和删除列表,例如

列出删除 ID = .....

Whie(...){
  if(delete) {
      deletesId.add(idDataForDeleting);
  } 
}

然后您可以执行以下操作:

String sql = "DELETE FROM TABLE WHERE ID IN (" + separateByComma(deletesId) + ")";
executeDelete(sql);

当然,尽量使用PreparedStamment,我的意思是这样你就可以一步一步对数据库进行删除操作,总比一个一个好。

于 2013-09-10T21:31:35.743 回答