2016-09-23 49 views
0

我有一个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

INSERT语句总是添加一行。所有REPLACE子句的作用是删除旧行,如果存在冲突的话。

如果您想避免不必要地更改行,您必须首先执行SELECT以检查旧值,然后根据需要执行UPDATE或INSERT或不执行任何操作。

为了加速这个过程,把整个循环放到一个事务中。

+0

我试过了,'UPDATE'仍然返回所有记录的'rowsAffected = 1' ... – yaylitzis

+0

对不起,旧的答案只会帮助缺少的行。 –