2016-02-08 78 views
-1

我正在使用jdbc在java中對1000條記錄進行批量更新。其中800條記錄成功更新,200條記錄失敗。所以我想檢查批量更新查詢哪些所有200條記錄都未能更新,我將使用批量插入將它們插入到數據庫中。我怎麼能做到這一點?發現批量更新的哪些記錄失敗

+0

不是你的批量查詢返回一個int數組來反映記錄更新嗎? – TheLostMind

+0

是的,但我想知道哪些記錄沒有更新 –

+0

返回的數組中有值爲0的所有記錄 – TheLostMind

回答

2

executeBath()方法從Statement返回一個整數數組(每個命令執行一個整數)。每個整數表示更新計數。如果1或更大,則更新成功完成;如果爲0,則不會使用其各自的命令更新記錄。

實施例:

List<YourClass> objectsToUpdate = getObjectsToUpdate(); 

for (YourClass object : objectsToUpdate) { 
    String updateCommand = generateUpdateCommand(object); 
    statement.addBatch(updateCommand); 
} 
int[] results = statement.executeBatch(); 

List<YourClass> notUpdated = new ArrayList<YourObject>(); 

for (int i = 0; i < results.length; i++) { 
    if (results[i] == 0) { 
     notUpdated.add(objectsToUpdate.get(i)); 
    } 
} 

這只是展示的算法。考慮使用PreparedStatement而不是Statement

+0

但是沒有更新的記錄(查詢失敗)我想檢索它們。我怎麼能夠? –

+0

這樣的事情:有一個對象的列表/數組,你爲每個對象生成一個命令並調用addBatch(),然後調用executeBatch(),它返回一個數組。然後迭代並檢查項是否爲0.如果爲0,則相應數組索引中的對象未更新。 – andrucz

+0

剛剛更新了我的答案。 – andrucz

0

爲了完整起見,說使用批量更新時,JDBC驅動程序也可以返回(作爲整數數組的一部分)Statement.SUCCESS_NO_INFO(當沒有關於更新行的信息時)或Statement.EXECUTE_FAILED(當發生異常時)

某些JDBC驅動程序甚至可能會在異常情況下停止執行進一步的語句(更新)。