批處理(batch)
一、批處理介紹
1、 批處理指的是一次操作中執行多條SQL語句
2、 批處理相比於一次一次執行效率會提高很多
3、 批處理主要是分兩步:
1.將要執行的SQL語句保存
2.執行SQL語句
4、 Statement和PreparedStatement都支持批處理操作,這里我們只需要掌握PreparedStatement的批處理方式:
1) 方法:
void addBatch()
- 將要執行的SQL先保存起來,先不執行
- 這個方法在設置完所有的占位符之后調用
int[] executeBatch()
- 這個方法用來執行SQL語句,這個方法會將批處理中所有SQL語句執行
2) mysql默認批處理是關閉的,所以我們還需要去打開mysql的批處理:
? rewriteBatchedStatements=true
我們需要將以上的參數添加到mysql的url地址中
3) 注意:低版本的mysql-jdbc驅動也不支持批處理
二、批處理的實現
在連接數據庫的url后面添加? rewriteBatchedStatements=true,開啟批處理
1 public void insertUser() throws SQLException { 2 Connection conn = JDBCUtils.getConnection(); 3 PreparedStatement ps = null; 4
5 String sql = "insert into t_user values(null,?)"; 6 ps = conn.prepareStatement(sql); 7 for (int i = 0; i < 10000; i++) { 8 ps.setString(1, "user" + i); 9 ps.addBatch(); //將sql語句保存起來,先不執行
10 } 11 long start = System.currentTimeMillis(); 12 ps.executeBatch(); //執行批處理中所有的sql語句
13 long end = System.currentTimeMillis(); 14 System.out.println("It costs" + (end - start) + "milliSeconds"); 15 }
測試代碼:
1 @Test 2 public void testBatch() throws Exception { 3 Dao dao=new Dao(); 4 dao.insertUser(); 5 }
測試結果:
使用批處理只需要200多毫秒,而不開啟批處理需要十幾分鍾,由此可見,使用批處理可以大大縮短sql語句執行時間