1. 程式人生 > >JDBC批量執行sql(轉)

JDBC批量執行sql(轉)

JDBC的批量處理語句包括下面兩個方法:
addBatch(String):新增需要批量處理的SQL語句或是引數;
executeBatch();執行批量處理語句;
通常我們會遇到兩種批量執行SQL語句的情況:

1 多條SQL語句的批量處理;
2 一個SQL語句的批量傳參;

針對第一種情況我們以前的做法可能是建立多個Statement,然後挨個execute,或者乾脆寫個PL/SQL;寫過程是個明智的做法,但是我們還可以利用JDBC的批量處理語句進行處理,如下:
 ...
 Statement sm= conn.createStatement();
 sm.addBatch(sql1);
 sm.addBatch(sql2);
 ...
 sm.addBatch(sqln);
 sm.executeBatch();
 ...


我們只建立一次Statement,然後addBatch多條SQL,最後一起執行就可以了,這種用法不多,感覺還不如寫個PL/SQL!
但是第二種情況利用JDBC的批量處理語句就比較常見了,這一般用於PreparedStatement,執行同一條語句,只是要傳多條引數,多用於批量增、刪、改!以前我們習慣使用下面迴圈的方式進行傳參。

//這樣運用會造成效率下降,當資料量較小時,區別不大,但誰會開發一個數據量小的系統呢
 ...
 PreparedStatement ps = conn.prepareStatement(sql);
 for(int i=0;i<N;i++)...{
  ps.setInt(1,i);
  ....
  ps.executeQuery();
 }
 ...


如果我們使用了JDBC的批量處理語句,就可以像下面那樣處理:
 ...
 PreparedStatement ps = conn.prepareStatement(sql);
 for(int i=100;i<1101;i++)...{
  pssetInt(1,i);
  ...
  ps.addBatch();
 }
 ps.executeBatch();
 ...


前者是每傳一次參就要執行一次,而後者只執行一次!我做了一個測試,在批量處理的條數很少的時候二者的效率差別不是很大,但是超過50條,就有了差距,隨著條數的增多就越明顯!所以當我們遇到批量處理的時候,一定要優先考慮JDBC的批量處理語句。

注意:
1 第一種情況不可以新增查詢SQL,因為executeBatch()返回的是int [],如果把返回ResultSet的SQl加入會引起異常;
2 第二種情況可以適用於沒有返回引數的儲存過程,如果儲存過程有返回引數,是不可以使用批量處理的!

相關推薦

JDBC批量執行sql

JDBC的批量處理語句包括下面兩個方法:addBatch(String):新增需要批量處理的SQL語句或是引數;executeBatch();執行批量處理語句;通常我們會遇到兩種批量執行SQL語句的情況

Spark執行流程

dep 相關 集群管理 十個 多個 運行原理 啟動 因此 分享圖片   原文地址:http://blog.jobbole.com/102645/    我們使用spark-submit提交一個Spark作業之後,這個作業就會啟動一個對應的Driver進程。

如何優化JAVA代碼及提高執行效率

car jdk nts 外部 ast 兩種 泛型 copy app 可供程序利用的資源(內存、CPU時間、網絡帶寬等)是有限的,優化的目的就是讓程序用盡可能少的資源完成預定的任務。優化通常包含兩方面的內容:減小代碼的體積,提高代碼的運行效率。本文討論的主要是如何提高代碼的效

Web應用啟動時,後臺自動啟動一個執行

原文:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html Web應用啟動時,後臺自動啟動一個執行緒   (1)前言     前幾天,manager問道一個問題:能不能實現類似於cro

MFC單文件框架分析及執行流程

原文轉自 https://blog.csdn.net/u011619422/article/details/40402705   首先來分析一下MFC單文件類的結構: 它包括如下幾個類: CAboutDlg :  對話方塊框類,對應應用程式的“幫助”->“關於”選單,彈出“關

am335x uboot2016.05 MLO u-boot.img執行流程

eve eset dog 不同的 common 速度 star setup oba am335x的cpu上電後,執行流程:ROM->MLO(SPL)->u-boot.img 第一級bootloader:引導加載程序,板子上電後會自動執行這些代碼,如啟動方式(SD

C# 多執行 C#多執行

C#多執行緒   一、基本概念 1、程序 首先開啟工作管理員,檢視當前執行的程序: 從工作管理員裡面可以看到當前所有正在執行的程序。那麼究竟什麼是程序呢? 程序(Process)是Windows系統中的一個基本概念,它包含著一個執行程式所需要的

IBATIS動態SQL

  直接使用JDBC一個非常普遍的問題就是動態SQL。使用引數值、引數本身和資料列都是動態SQL,通常是非常困難的。典型的解決辦法就是用上一堆的IF-ELSE條件語句和一連串的字串連線。對於這個問題,Ibatis提供了一套標準的相對比較清晰的方法來解決一個問題,這裡有個簡單的例子:      <sel

MyBatis原始碼解析——執行流程

一、MyBatis簡介   MyBatis框架是一種輕量級的ORM框架,當下十分流行,配合Spring+Spring MVC組成SSM框架,能夠勝任幾乎所有的web專案工程。   MyBatis不同於Hibernate的最重要的地方就是SQL部分,MyBatis中你可

java本地使用JDBC連線Spark SQLHiveServer2

根據Spark官網所述,Spark SQL實現了Thrift JDBC/ODBC server: The Thrift JDBC/ODBC server implemented here corresponds to the HiveServer2 in Hive 1.

servlet的執行原理

1.什麼是servlet? Servlet是一種伺服器端的Java應用程式,Server + Applet =Servlet 意為伺服器端的小程式,具有獨立於平臺和協議的特性,可以生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程式)與伺服器響應(

linux下 /etc/profile、~/.bash_profile ~/.profile的執行過程

關於登入linux時,/etc/profile、~/.bash_profile等幾個檔案的執行過程。 在登入Linux時要執行檔案的過程如下: 在剛登入Linux時,首先啟動 /etc/profile 檔案,然後再啟動使用者目錄下的 ~/.bash_profile、 ~/

c#實現用SQL執行,定時批量執行SQL語句

在實際專案開發中,業務邏輯層的處理速度往往很快,特別是在開發Socket通訊服務的時候,網路傳輸很快,但是一旦加上資料庫操作,效能一落千丈,資料庫操作的效率往往成為一個系統整體效能的瓶頸。面對這問題,我們怎麼辦呢?好,下面我就為大家介紹一種方法:構建SQL池,分離業務邏輯層

logback 打印Mybitis中的sql執行過程

values tis nav ole 決定 ret 閱讀 factor ins 閱讀目錄 1 不同版本的Mybitis對應不同的控制策略 場景:在程序開發過程中經常需要跟蹤程序中sql語句的執行過程,在控制臺打印出sql語句和對應的參數傳遞就能夠更快的定

php利用root權限執行shell腳本

用戶組 參考 linux shell腳本 con src itl 為我 star 轉一篇博客,之前搞這個東西搞了好久,結果今天晚上看到了一篇救命博客,瞬間開心了。。。轉載轉載 利用sudo來賦予Apache的用戶root的執行權限,下面記錄一下: 利用PHP利用root權限

批量部署 自動化之 - [pssh]

時間 provide 分發 登錄 並發 check ast 可選 git clone 並行執行命令工具簡介 作為運維工程師來講,機器數量到一定級別的時候,批量運維和管理機器就是一件費神的事情,還好有很多可以批量並行執行命令的工具,比如 pssh , python fabr

使用MYSQL命令直接導入導出SQL文件

cmd 界面 eat 保存 tail utf mysqldump info tails 參考:http://blog.csdn.net/jiary5201314/article/details/52026816 1.MYSQL中將數據庫導出成SQL文件 其實很簡單的,就

SQL Server 2005兩種安全驗證模式

信任 nbsp 維護 混合 login 帳戶 所有 兩種 seve (1) Windows身份驗證模式 Windows 身份驗證模式是指用戶通過 Windows 用戶帳戶連接到SQL Server,即用戶身份由Windows 系統來驗證。SQL Server 使用 Win

Linq to SQL 的連表查詢

equal query 交集 數據庫 調用 數據 變量 bst log 關於數據庫的查詢中經常需要用到多表的連接查詢,這裏就簡單地展示關於linq的查詢功能。 1、單表的查詢 [csharp] view plain copy var query = from

JDBC 復習4 批量執行SQL

pre bat 機制 tint close .sql str 執行效率 batchsql 1使用jdbc進行批量執行SQL在實際的項目開發中,有時候需要向數據庫發送一批SQL語句執行,這時應避免向數據庫一條條的發送執行,而應采用JDBC的批處理機制,以提升執行效率。 pac