我有一个Web应用程序(使用servlet和JSP页面构建),数据库为SQLITE
。
在某些时候,我想检查整个表格,并在需要时替换所有记录。
我尝试更新我的表格(我使用PreparedStatements
)
sq = "INSERT OR REPLACE INTO myTable VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";
所有记录都是5000,这个过程需要几分钟才能完成......我注意到,对于每条记录,不管它是否被更改,该行都会被修改,因为我总是rowsAffected = 1
for(Label l:labels){
stm.setString(1, l.getOldName());
//etc...
rowsAffected = stm.executeUpdate();
System.out.println("rowsAffected = " + rowsAffected);
}
还有其他更优化的方式来更新我的桌子吗?
答案 0 :(得分:0)
INSERT语句总是添加一行。所有REPLACE子句都是删除旧行,如果存在冲突的话。
如果您想避免不必要地更改行,您必须首先执行SELECT以检查旧值,然后根据需要执行UPDATE或INSERT操作。
为了加快这个过程,将整个循环放入一个事务中。