Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用where新建结果集,或将光标移动到开头并手动检查条件_Java_Sql_Jdbc - Fatal编程技术网

Java 使用where新建结果集,或将光标移动到开头并手动检查条件

Java 使用where新建结果集,或将光标移动到开头并手动检查条件,java,sql,jdbc,Java,Sql,Jdbc,我将得到一个staging表,我运行一个进程将数据加载到一个更大的表中,并从staging表中删除数据。不过,暂存表中的某些行表示删除主表中的行 目前算法如下: ResultSet dataToLoad = select * from ...; ResultSet mainTable = select * from ...; while (dataToLoad.next()) { if(insert) //insert this row into main tabl

我将得到一个staging表,我运行一个进程将数据加载到一个更大的表中,并从staging表中删除数据。不过,暂存表中的某些行表示删除主表中的行

目前算法如下:

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
}
我的问题是删除块。最好创建一个新的结果集,使用where查找行并删除集合中的单个行,还是将光标放在开头并循环遍历光标检查条件?本质上类似于在java代码中实现where子句

在结果集中加载时,JDBC缓存了多少?它会为每次光标跳转执行完整的网络往返吗


最后,我简单地读了一下万圣节的问题。我在这里有风险吗?

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

列表deletesId=

Whie(...){
  if(delete) {
      deletesId.add(idDataForDeleting);
  } 
}
然后你可以做一些类似的事情:

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

当然,尝试使用PreparedStatement,我的意思是,您将在一个步骤中对数据库执行删除操作,这比逐个执行要好。

为什么不使用带有删除查询的PreparedStatement执行删除操作呢?游标是邪恶的。了解集合,以及如何对enitre集合而不是集合中的每条记录执行更新、删除等操作@Declan_K很多人都在谈论这个答案的设置技巧,但讽刺的是,我没有看到任何实际的链接。我想建立一个列表。我的问题是,临时表中的数据没有主表的ID。我听说有3列可以保证唯一性,所以我会用它们来查找我的行。像((val1,val2,val3),(val1,val2,val3),…)中的
(col1,col2,col3)这样的语法有效吗?
我不认为有效,构建一个大的删除字符串怎么样?然后您可以将其发送给db。例如:while(…){if(delete)deleteString+=makeStringDelete()+“;”;}executeElete(deleteString);发送所有删除将比逐个发送要好,我不知道您是如何处理数据库连接的,但是如果您打开和关闭数据库连接,则最好一步执行它们。好吧,更令人困惑的是,我不直接使用JDBC。我在一个图书馆工作,这个图书馆在我来之前就建在上面了。我相当确信,在应用程序的生命周期中,连接是保持的。这是在一个web应用程序中,数据库经常被访问。通过创建删除字符串,您是指
其中col1=val1和col2=val2和col3=val3还是…