亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

【jdbcTemplate】批量插入異常捕獲

【jdbcTemplate】批量插入異常捕獲

呼啦一陣風 2019-04-24 18:19:42
在使用jdbctemplate的批量操作的時候調用jdbcTemplate.batchUpdate,他的原理機制是,集合一定數量的sql,一起發送到數據庫,這樣減少與數據庫頻繁交互的成本但現在有一個問題就是,我這有50條sql,批量插入,然后有一條有問題,我如何讓這一條執行失敗時,不影響其余49條語句的執行呢?下面是我自己封裝的一個方法批量插入這個list到數據庫去,如果出現什么值太大,違反唯一性約束什么之類的異常,我的那個catch根本就捕獲不住,我最多只能知道這個list插入有問題,沒法實現list中一條記錄有問題,不影響其他記錄的執行public void insert(final List<?> lists) {// 獲取insert語句 eg:sql = insert into user (id,name,age) values (?,?,?)String sql = SqlUtils.getInsertSql(lists.get(0));jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {@Overridepublic void setValues(PreparedStatement ps, int i) {Object value = lists.get(i);// objects = 獲取代替?的具體值Object[] objects = SqlUtils.getValues(value);for (int k = 0; k < objects.length; k++) {try {ps.setObject(k + 1, objects[k]);} catch (SQLException e) {log.error("數據庫異常 -- "+value.getClass().getSimpleName(),e);}}}    @Override     public int getBatchSize() {         return lists.size();     } });}
查看完整描述

3 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

如果想批量,就要一起commit,一起回滾事物,
否則如果你想記錄記錄哪條數據有問題,
那就不要批量,一條一條提交,
碰到有問題的trycatch去捕獲他,
定義一個字符串記錄一下,然后再繼續提交,
如果再次碰到有問題的,然后在追加字符串,
最終返回字符串,
如果是空的,代表全部成功,
否則就查詢字符串里面記錄的信息,就知道哪條失敗了


查看完整回答
反對 回復 2019-05-06
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

做不到,JDBC batch 操作是批量提交的


查看完整回答
反對 回復 2019-05-06
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

批量么,肯定是要么全commit,要么全rollback。
你既然用了batchUpdate,batchInsert,那你肯定得確保你的批量sql都沒有問題。
神馬主鍵約束啊,你設計的數據庫不會考慮到這些問題么,如果不用主鍵自增長,那你頁面表單就得ajax判斷數據庫是不是已經存在了!
長度神馬的都是客戶端上該處理的問題,你這些驗證控制自己不做好,數據庫再牛板也幫不了你啊

查看完整回答
反對 回復 2019-05-06
  • 3 回答
  • 0 關注
  • 1698 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號