2013-09-30 26 views
0

以下代碼使用JdbcTemplate.batchUpdate()將行插入到數據庫中;Spring JdbcTemplate.batchUpdate()失敗時嘗試的最佳策略

Map<String,Object>[] batchValues = ...; 
namedParameterJdbcTemplate.batchUpdate(sql, batchValues); 

當它失敗時,拋出DataAccessException。 我仍然無法確定哪些行(即地圖中的條目)存在問題並導致異常。目前,當拋出這樣的異常時,我們試圖單獨插入每一行。有更好的方法嗎? 謝謝

回答

0

我看到兩種可能性,並應根據要求做出決定。

  1. 回滾事務,然後重試。這取決於異常的類型。如果存在違反約束條件的異常,則只能糾正數據並重試該操作。 這是一個很好的方法,其中全部或者不遵循。您完全知道您是否完成了數據庫操作。
  2. batchUpdate爲您提供更新計數。 AFAIK,您可以放心地將其視爲在批次列表中更新的行數。當jdbc驅動程序不支持批量更新時,這可能會有問題,彈簧會自動回退到單個語句執行。當操作可重用時,此方法更適合使用。
+0

問題是,據我所看到的,batchUpdate()只會在batch實際完成時爲批處理中的每個操作返回一個更新計數 - 否則拋出DataAccessException,並且無法容易地識別哪個'行'是有問題的。如果有某種方法來識別這些,那將是非常棒的。 – user1052610

+0

DataAccessException應該包含原因,它應該是一個'java.sql.BatchUpdateException',您可以從中檢索更新計數(當由基礎JDBC提供程序設置時)。 –