麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

iBatis框架batch處理優(yōu)化

2019-11-18 15:28:25
字體:
供稿:網(wǎng)友
為什么要做batch處理    

    這個問題我就不解釋了,因為我想你們肯定能比

我解釋的更好!假如你真的不知道,那就到雅虎上去搜

索一下吧?

Oracle回滾段

    這個問題偶也不很明白,只是大概有個了解,如

果你是這方面的專家,或者對這方面有比較深的理解,

別忘了跟偶分享哦?

在JDBC中如何做batch處理

    JDBC提供了數(shù)據(jù)庫batch處理的能力,在數(shù)據(jù)大批量操作(新增、刪除等)的情況下可以大幅度提升系統(tǒng)的性能。我以前接觸的一個項目,在沒有采用batch處理時,刪除5萬條數(shù)據(jù)大概要半個小時左右,后來對系統(tǒng)進(jìn)行改造,采用了batch處理的方式,刪除5萬條數(shù)據(jù)基本上不會超過1分鐘。看一段JDBC代碼:
  1. // 關(guān)閉自動執(zhí)行
  2. con.setAutoCommit(false);
  3. Statement stmt = con.createStatement();
  4. stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')");
  5. stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')");
  6. stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)");
  7. // 提交一批要執(zhí)行的更新命令
  8. int[] updateCounts = stmt.executeBatch();


    本例中禁用了自動執(zhí)行模式,從而在調(diào)用 Statement.executeBatch() 時可以防止 JDBC 執(zhí)行事務(wù)處理。禁用自動執(zhí)行使得應(yīng)用程序能夠在發(fā)生錯誤及批處理中的某些命令不能執(zhí)行時決定是否執(zhí)行事務(wù)處理。因此,當(dāng)進(jìn)行批處理更新時,通常應(yīng)該關(guān)閉自動執(zhí)行。

    在JDBC 2.0 中,Statement 對象能夠記住可以一起提交執(zhí)行的命令列表。創(chuàng)建語句時,與它關(guān)聯(lián)的命令列表為空。Statement.addBatch() 方法為調(diào)用語句的命令列表添加一個元素。假如批處理中包含有試圖返回結(jié)果集的命令,則當(dāng)調(diào)用 Statement. executeBatch() 時,將拋出 SQLException。只有 DDL 和 DML 命令(它們只返回簡單的更新計數(shù))才能作為批處理的一部分來執(zhí)行。假如應(yīng)用程序決定不提交已經(jīng)為某語句構(gòu)
造的命令批處理,則可以調(diào)用方法 Statement.clearBatch()(以上沒有顯示)來重新設(shè)置批處理。

    Statement.executeBatch() 方法將把命令批處理提交給基本 DBMS 來執(zhí)行。命令的執(zhí)行將依照在批處理中的添加順序來進(jìn)行。ExecuteBatch() 為執(zhí)行的命令返回更新計數(shù)數(shù)組。數(shù)組中對應(yīng)于批處理中的每個命令都包含了一項,而數(shù)組中各元素依據(jù)命令的執(zhí)行順序(這還是和命令的最初添加順序相同)來排序。調(diào)用executeBatch() 將關(guān)閉發(fā)出調(diào)用的 Statement 對象的當(dāng)前結(jié)果集(假如有一個結(jié)果集是打開的)。executeBatch() 返回后,將重新將語句的內(nèi)部批處理命令列表設(shè)置為空。

    假如批處理中的某個命令無法正確執(zhí)行,則 ExecuteBatch() 將拋出BatchUpdateException。可以調(diào)用BatchUpdateException.getUpdateCounts() 方法來為批處理中成功執(zhí)行的命令返回更新計數(shù)的整型數(shù)組。因為當(dāng)有第一個命令返回錯誤時,Statement.executeBatch() 就中止,而且這些命令是依據(jù)它們在批處理中的添加順序而執(zhí)行的。所以假如 BatchUpdateException.getUpdateCounts() 所返回的數(shù)組包含 N 個元素,這就意味著在調(diào)用 executeBatch() 時批處理中的前 N 個命令被成功執(zhí)行。用PReparedStatement 可以象下面這樣寫代碼:

  1. // 關(guān)閉自動執(zhí)行
  2. con.setAutoCommit(false);
  3. PreparedStatement stmt = con.prepareStatement("INSERT INTO employees VALUES (?, ?)");
  4. stmt.setInt(1, 2000);
  5. stmt.setString(2, "Kelly Kaufmann");
  6. stmt.addBatch();
  7. ???
  8. // 提交要執(zhí)行的批處理
  9. int[] updateCounts = stmt.executeBatch();


iBatis框架對batch處理的支持

    iBatis框架對batch處理提供了很好的支持,底層的實現(xiàn)方式就是JDBC。下面看一段示例代碼:

  1.     private void execute(SqlMapClient client){
  2.         if(log.isDebugEnabled()){
  3.             log.debug("execute start...");
  4.         }
  5.         client.startBatch();
  6.         
  7.         for(int i=0;i<2000;i++){
  8.             client.delete("delete from order where id=?",i);
  9.             
  10.         }
  11.         client.executeBatch();
  12.         if(log.isDebugEnabled()){
  13.             log.debug("execute end...");
  14.         }
  15.     }



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色大片高清 | 制服丝袜日日夜夜 | 国产羞羞网站 | 天堂成人国产精品一区 | 午夜精品久久久久久中宇 | 欧美特级黄色 | 黄色av免费| 色播视频在线播放 | 久久99精品久久久久久久久久久久 | 国产一级一区二区 | 久久久三级免费电影 | 久久久aa | 一级黄色国产视频 | 日韩视频高清 | 黄wwww| 国产日韩一区二区三区在线观看 | 国产亚洲在 | 成人永久免费视频 | 一级免费特黄视频 | 欧美激情猛片xxxⅹ大3 | 性欧美极品xxxx欧美一区二区 | 精品久久999 | 久久综合精品视频 | wwwxxx免费视频| 丁香天堂网 | 欧美一级黄色片在线观看 | 亚洲成人高清在线观看 | 欧美日韩在线视频一区 | 少妇一级淫片免费放4p | 黄色大片www | 九色中文 | 欧美国产日韩在线观看成人 | 欧美一级在线免费 | 欧美日韩成人一区二区 | 在线观看视频日本 | 国产精品三级a三级三级午夜 | 看免费的毛片 | 在线成人免费网站 | 亚洲综合一区二区三区 | 久久福利小视频 | 国产精品高潮99久久久久久久 |