Statement與preparedStatement用法深入之批處理

來源:互聯網
上載者:User

      

        我們可以通過使用 Statement或preparedStatement的對象來執行相應的sql語句,但是有時,當我們需要向資料庫發送一批SQL語句執行時,為了避免向資料庫一條條的發送執行,我們就應該採用JDBC的批處理機制,以提升執行效率。

 

實現批處理有兩種方式,第一種方式:Statement對象

Statement.addBatch(sql) 

 

     例如:我們在在向一個名為me的表中輸一批入資料時我們就可以採用批處理來實現。

   Connection con =null;

    Statement st=null;

    ResultSet rs=null;

    PreparedStatement ps=null;

    publicvoid statementBanch(){

        con = DBCManager.getConnect();//擷取連線物件

          

           try {

           //定義sql語句

              String sql = "insertinto me (id,name,age ) values(1,'lisi',13)";

               String sql1 = "update me set id =2,name ='zhangsan',age =14 whereid =1";

               //建立語句對象

               st =con.createStatement();

              //添加進批

               st.addBatch(sql);

              st.addBatch(sql1);

              //執行批

              st.executeBatch();

           } catch (SQLException e) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           }

           DBCManager.release(null, null, con);

    }

這樣我們就完成了對於一批有不同的sql句的資料的插入。

但是,還有時候,我們需要向資料庫發送的多條語句相同,但僅參數不同的SQL語句時,需重複寫上很多條SQL語句,如:

Insert into user(name,password) values(‘aa’,’111’);

       Insert into user(name,password) values(‘bb’,’222’);

       Insert into user(name,password) values(‘cc’,’333’);

       Insert into user(name,password) values(‘dd’,’444’);

這就大大的降低了程式啟動並執行效率,且所有SQL語句沒有進行先行編譯,這樣是很不好的,因此,我們便需要藉助第二種方式來進行對具有相同特徵的一批資料的插入工作。也就是,使用PrepareStatement對象來實現,這種整批資料的錄入。

 

例:

    publicvoid prepareStatementBanch(){

               con = DBCManager.getConnect();//擷取連線物件

                 

                  try {

                  //定義sql語句

                     String sql = "insert into me (id,name,age ) values(?,?,?)";

                    

                      //建立語句對象

                      ps =con.prepareStatement(sql);

                      for(int i=0;i<=10;i++){

                      //為欄位賦值

                      ps.setInt(1, i+1);

                      ps.setString(2, "name"+i);

                      ps.setInt(3, 10+i);

                      //添加進批

                      ps.addBatch();

                       //設定條件當i對10取餘為0時,先執行一次批語句,然後將批清除

                      if(i%10==0){

                          ps.executeBatch();

                          ps.clearBatch();

                      }

                     

                      }

                      //將批中剩餘的語句執行完畢

                      ps.executeBatch();

                    

                  } catch (SQLException e) {

                     // TODO Auto-generatedcatch block

                     e.printStackTrace();

                  }

                  DBCManager.release(null, ps, con);

   }

   

這樣通過採用PreparedStatement.addBatch()實現批處理,發送出去的是通過先行編譯後的SQL語句,執行起來效率會更高。當然,這樣做也有它的不足之處即:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入資料,或批次更新表的資料。

    這樣我們以後就可以通過幾種不同的方式來實現對於不同類型、不同數量的資料的插入了。

      

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.