2016-09-23 77 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

對不起,舊的答案只會幫助缺少的行。 –