進行批量更新的時候發現:
addBatch(sql);
executeBatch 拋出異常后,剩余的sql沒有更新,即出現異常之前的都入庫了,異常之后即使有可執行sql都不會執行。
百度資料后了解:這是DBMS數據庫管理系統控制的,有的DBMS在異常之后,剩下的sql也會執行,有的DBMS異常之后其余的不入庫。
我的改進方法如下:public static boolean bachInsertData(List<String> sqlList) { boolean bool = false; Connection conn = null;
public static boolean bachInsertData(List<String> sqlList) { boolean bool = false; Connection conn = null; Statement stm = null; try { conn = MyDAO.getConnection(); conn.setAutoCommit(false); stm = conn.createStatement(); for (String sql : sqlList) { stm.addBatch(sql); } stm.executeBatch(); conn.commit(); bool = true; } catch (Exception e) { if(e instanceof BatchUpdateException){ BatchUpdateException bException = (BatchUpdateException)e; int[] s = bException.getUpdateCounts(); logger.info("更新失敗數據:"+sqlList.get(s.length)); if(s.length+1<sqlList.size()){ List<String> sList = sqlList.subList(s.length+1, sqlList.size()); bachInsertData(sList); } }else{ e.printStackTrace(); try { if (stm != null) stm.close(); } catch (SQLException ex) { ex.printStackTrace(); } try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } } } finally { try { if (stm != null) stm.close(); } catch (SQLException ex) { ex.printStackTrace(); } try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } } return bool; }
以前不知道哇啊啊啊啊,好多得改!!!