超簡單使用批處理(batch)操作數據庫
批處理(batch)是什么
批處理的執行就好比快遞員的工作:
未使用批處理的時候,快遞員一次從分發點將一件快遞發給客戶;
使用批處理,則是快遞員將所有要派送的快遞都用車帶到發放處派給客戶。
批處理(batch)操作數據庫
批處理指的是一次操作中執行多條SQL語句,批處理相比於一次一次執行效率會提高很多。
批處理操作數據庫的過程主要是分兩步:
1.將要執行的SQL語句保存
2.執行保存的SQL語句
如何實現批處理
Statement和PreparedStatement都支持批處理操作,這里我們只說明PreparedStatement的批處理方式:
方法:
void addBatch()
將要執行的SQL先保存起來,先不執行
這個方法需要在在設置完所有的占位符之后調用
int[] executeBatch()
這個方法用來執行SQL語句,這個方法會將批處理中所有SQL語句執行
mysql默認批處理是關閉的,所以我們還需要去打開mysql的批處理:
我們需要在mysql的url地址中加入一下參數:
rewriteBatchedStatements=true
例如:URL = "jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true";
演示實例:
1.創建一張新的數據表
CREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT, uname VARCHAR(50) )
2、測試源碼
1 //向test表中插入10000條數據 2 @Test//測試批處理 3 public void testBatch(){ 4 //向test表中插入10000條數據 5 Connection connection = null; 6 PreparedStatement ps = null; 7 try { 8 /* 9 *獲取數據庫連接 數據庫鏈接操作在此不進行贅述 10 *原生數據庫操作可參考:http://www.cnblogs.com/Mr-Dawei/p/7455324.html 11 */ 12 connection=XXXX; 13 //sql語句編寫 14 String sql = "INSERT INTO test(uname) VALUES(?)"; 15 //獲取PrepareStatement 16 ps = connection.prepareStatement(sql); 17 //創建一個for循環,來設置占位符參數數 18 for(int i = 0; i < 10000 ;i++){ 19 ps.setString(1,"test"+i); 20 //添加到批處理方法中,調用無參的,有參的是Statement來調用的! 21 ps.addBatch(); 22 } 23 //獲取一個時間戳 可以測試執行效率 24 long start = System.currentTimeMillis(); 25 //統一執行執行批處理 26 ps.executeBatch(); 27 //獲取一個時間戳 28 long end = System.currentTimeMillis(); 29 System.out.println("共花費了:"+(end-start)); 30 } catch (SQLException e) { 31 e.printStackTrace(); 32 } finally{ 33 //逆序關閉資源 34 } 35 }
通過操作結果我們可以清楚地看出其中批處理執行的效率提升多么明顯
本人對批處理的了解淺顯,若過路的諸位發現任何不對之處,還請多多之處。