JDBC批處理

JDBC實現批處理有兩種方式:statementpreparedstatement
先比較一下兩種方式的批處理:
1.採用Statement.addBatch(sql)方式實現批處理的優缺點
採用Statement.addBatch(sql)方式實現批處理:
優點:可以向數據庫發送多條不同的SQL語句。
缺點:SQL語句沒有預編譯。
當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重複寫上很多條SQL語句。
2.採用PreparedStatement.addBatch()方式實現批處理的優缺點
採用PreparedStatement.addBatch()實現批處理
優點:發送的是預編譯後的SQL語句,執行效率高。
缺點:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入數據,或批量更新表的數據。

下面具體介紹一下:

一.使用Statement完成批處理

1.使用Statement對象添加要批量執行SQL語句,如下:

Statement.addBatch(sql1);
Statement.addBatch(sql2);
Statement.addBatch(sql3);

2、執行批處理SQL語句:Statement.executeBatch();
3、清除批處理命令:Statement.clearBatch();

1.1 使用Statement完成批處理範例

 public void testJdbcBatchHandleByStatement(){
         Connection conn = null;
         Statement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             st = conn.createStatement();
             //添加要批量執行的SQL
             st.addBatch(sql1);
             st.addBatch(sql2);
             st.addBatch(sql3);
             st.addBatch(sql4);
             st.addBatch(sql5);
             st.addBatch(sql6);
             st.addBatch(sql7);
             //執行批處理SQL語句
             st.executeBatch();
         }catch (Exception e) {
         	 conn.rollback();
             e.printStackTrace();
         }finally{
              //清除批處理命令
             st.clearBatch();
             JdbcUtils.release(conn, st, rs);
         }
     }

二、使用PreparedStatement完成批處理

1.PerparedStatement在conn.prepareStatement(sql); 的時候需要將sql直接傳入。
2.添加批處理: pst.addBatch();

2.1 使用PreparedStatement完成批處理範例

     public void testJdbcBatchHandleByPrepareStatement(){
         long starttime = System.currentTimeMillis();
         Connection conn = null;
         PreparedStatement pst = null;
         ResultSet rs = null;
         
         try{
             conn = JdbcUtils.getConnection();
             String sql = "insert into testbatch(id,name) values(?,?)";
             pst = conn.prepareStatement(sql);
             for(int i=1;i<1000008;i++){  //i=1000  2000
                 pst.setInt(1, i);
                 pst.setString(2, "aa" + i);
                 pst.addBatch();
                 if(i%1000==0){
                     pst.executeBatch();
                     pst.clearBatch();
                 }
             }
             pst.executeBatch();
         }catch (Exception e) {
             e.printStackTrace();
         }finally{
             JdbcUtils.release(conn, pst, rs);
         }

參考文章

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