Java 使用where新建结果集,或将光标移动到开头并手动检查条件
我将得到一个staging表,我运行一个进程将数据加载到一个更大的表中,并从staging表中删除数据。不过,暂存表中的某些行表示删除主表中的行 目前算法如下: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
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还是…
?