sql批處理(batch)的簡單使用

批處理指的是一次操作中執行多條SQL語句,相比於一次一次執行效率會提高很多

  • 批處理主要是分兩步:
  1. 將要執行的SQL語句保存
  2. 執行SQL語句

Statement和PreparedStatement都支持批處理操作,PreparedStatement的批處理方式:

  • 方法:
    • void addBatch():將要執行的SQL先保存起來,先不執行,這個方法在設置完所有的佔位符之後調用
    • int[] executeBatch():這個方法用來執行SQL語句,這個方法會將批處理中所有SQL語句執行

mysql默認批處理是關閉的,所以還需要去打開mysql的批處理:

rewriteBatchedStatements=true

需要將以上的參數添加到mysql的url地址中,不加的話,也能執行,但並不是真正的批處理,很慢。

注意:低版本的mysql-jdbc驅動也不支持批處理,一般都是在修改的時候使用批處理,查詢的時候不使用!(mysql-connector-java-5.1.7-bin.jar不支持,mysql-connector-java-5.1.42.jar支持)

 

1、創建一張新的數據表

CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(50)
)

2、引入批處理

 1 @Test//測試批處理
 2 public void testBatch(){
 3     //向student表中插入10000條數據
 4     //準備兩個變量
 5     Connection connection = null;
 6     PreparedStatement ps = null;
 7     try {
 8         conn = DBUtil.getConn();//獲取數據庫連接
 9         String sql = "INSERT INTO student(NAME) VALUES(?)";//準備SQL模板
10         ps = conn.prepareStatement(sql);//獲取PrepareStatement
11         //創建一個for循環,來設置佔位符
12         for(int i = 0; i < 1000 ;i++){
13             ps.setString(1,"stu"+i);//填充佔位符
14             ps.addBatch();//添加到批處理方法中,調用無參的方法,有參的是Statement來調用的!
15         } 
16         
17         long start = System.currentTimeMillis();//獲取一個時間戳
18         ps.executeBatch();//執行批處理
19         long end = System.currentTimeMillis();//獲取一個時間戳
20         System.out.println("用時:"+(end-start));
21     } catch (SQLException e) {
22         e.printStackTrace();
23     }
24 }

批處理執行效率高,資源利用率好!

插入1000條數據(沒有開啓批處理):13120ms

插入1000條數據(開啓批處理):517ms

 DBUtil工具類 --->資源目錄--->工具類--->數據庫操作工具類

mysql-connector-java-5.1.42.jar --->資源目錄--->jar包資源--->mysqlConnection jar包

原文出處:https://www.cnblogs.com/lixiang1993/p/7451793.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章