批處理batch,執行多個SQL語句

2021-06-29 13:51:02 字數 3114 閱讀 7210

批處理batch,執行多個sql語句。

[sql]view plain

copy

trycatch(exception e)catch(exception e1)  

}finally  

注意其中的兩個sql語句,其一是stmt.addbatch();其二是stmt.excutebatch();

在批量更新sql操作的時候建議使用addbatch,這樣效率是高些,資料量越大越能體現出來.

statement介面裡有兩個方法:

void

addbatch

(string

sql)

將給定的 sql 命令新增到此statement物件的當前命令列表中。通過呼叫方法executebatch可以批量執行此列表中的命令。

intexecutebatch

() 將一批命令提交給資料庫來執行,如果全部命令執行成功,則返回更新計數組成的陣列。

返回:

包含批中每個命令的乙個元素的更新計數所組成的陣列(陣列中的每個元素為:成功處理了命令後,執行命令所影響資料庫中行數的更新計數)。陣列的元素根據將命令新增到批中的順序排序。

preparedstatement介面裡:重寫了addbatch()

的方法,executebatch

()並沒有重寫

void

addbatch

()  《注意:preparedstatement的addbatch( )沒有引數的》

將一組引數新增到此 preparedstatement 物件的批處理命令中。

preparedstatement.addbatch()的使用:

jdbc批量更新pstmt.addbatch();的問題

在資料量越大的時候 越能體現addbatch()的優勢 

因為資料庫的處理速度是非常驚人的

單次吞吐量很大

執行效率極高

addbatch()

把若干sql

語句裝載到一起,然後一次送到資料庫執行,執行需要很短的時間

而pstmt.executeupdate()

是一條一條發往資料庫執行的

時間都消耗在資料庫連線的傳輸上面

舉個例子可以幫助理解: 

我這有一台超大功率的麵粉加工機,前者相當於 把所有農戶袋裝的麥子收集起來用卡車一次送往加工廠 後者相當於農戶排好隊用同樣的卡車一人一人的往加工廠送麥子 麥子加工5分鐘完成,但是每個人到工廠就得3小時,我資料庫執行效率再高也沒用,時間都耗在傳輸的路上了!!

這就出現了資料傳輸的效能瓶頸 addbatch就是為解決這樣的問題而產生的!

statement

和preparedstatement的區別就不多廢話了,直接說preparedstatement最重要的addbatch()結構的使用.

1.建立鏈結,(打**撥號 )    

connection    connection =getconnection();

2.不自動 commit (瓜子不是乙個乙個吃,全部剝開放桌子上,然後一口舔了)

connection.setautocommit(false); 3.

預編譯sql語句,只編譯一回哦,效率高啊.(發明乙個剝瓜子的方法,以後不要總想怎麼剝瓜子好.就這樣剝.)

preparedstatement statement= connection.preparestatement("insert into tablex values(?, ?)"); 4.

來乙個剝乙個,然後放桌子上

//記錄1

statement.setint(1, 1); 

statement.setstring(2, "cujo"); 

statement.addbatch();//

把這條執行語句加到preparedstatement物件的批處理命令中 //

記錄2statement.setint(1, 2); 

statement.setstring(2, "fred"); 

statement.addbatch();//

把這條執行語句加到preparedstatement物件的批處理命令中 

//記錄3

statement.setint(1, 3); 

statement.setstring(2, "mark"); 

statement.addbatch();

//把這條執行語句加到preparedstatement物件的批處理命令中  //

批量執行上面3條語句. 一口吞了,很爽

int counts =statement.executebatch();//

把以上新增到批處理命令中的所有命令一次過提交給資料庫來執行  

//commit it 

嚥下去,到肚子(db)裡面

connection.commit();

關於兩個preparestatement方法的區別:兩者都是建立乙個 preparedstatement 物件來將引數化的 sql 語句傳送到資料庫,區別僅僅在於,第二個preparedstatement物件有個resultset  getgeneratedkeys();方法可以返回執行statement物件而建立的任何自動生成的鍵(主要是自增的鍵)的結果集

preparedstatement

preparestatement(string sql) 

建立乙個 preparedstatement 物件來將引數化的 sql 語句傳送到資料庫。

preparedstatement

preparestatement(string sql,int autogeneratedkeys) 

建立乙個預設 preparedstatement 物件,該物件能獲取自動生成的鍵。

MSSQL用批處理執行多個sql指令碼

開始 執行 cmd osql 可以檢視引數資訊。注意 osql 並不支援 sql server 2008的所有功能。請使用 sqlcmd。有關詳細資訊,請參閱 sql server 聯機叢書。用法 osql u 登入 id p 密碼 s 伺服器 h 主機名 e 可信連線 d 使用資料庫名稱 l 登入...

Batch 批處理小彈珠

試了下寫乙個彈珠在黑框框中彈 上下彈的 沒想到執行這麼快,所以加了一句延時的 by ec echo off setlocal enabledelayedexpansion mode con cols 80 lines 24 set xy loop for l i in 1 1 64 do if de...

JDBC進行批處理Batch

在實際的專案開發中,有時候需要向資料庫傳送一批sql語句執行,這時應避免向資料庫一條條的傳送執行,而應採用jdbc的批處理機制,以提公升執行效率。jdbc實現批處理有兩種方式 statement和preparedstatement jdbc實現批處理有兩種方式 statement和prepareds...