用JDBC操作MySQL——大量資料庫操作時使用批處理提速

來源:互聯網
上載者:User

標籤:

之前所有的操作由於資料量很小,所以沒有進行批處理的最佳化,效能也沒有出現明顯的惡化,但是隨著我用java處理資料量的大幅提高,頻繁使用靜態SQL語句的方法嚴重降低了處理效率,這裡總結一下JDBC批處理的方法,來提高資料庫的輸送量。

 

首先,在SQL語句的形成上,我們可以使用StringBuilder合成SQL,也可以使用JDBC的set方法將參數帶入。

JDBC的批處理方法已知的有2大類:基於Statement對象的和PreparedStatement對象的

 

1. Statement對象的批處理

 

優勢與劣勢

Statement對象的批處理,通過調用addBatch方法將每個sql單獨加入Batch,調用stmt.executeBatch通常用於處理批量的不同種類SQL語句。本例中給出了使用插入,修改,刪除的批處理樣本。

Statement對象發送的是未經過編譯的SQL語句,執行效率較PreparedStatement慢

Connection conn=getConnection();String sql1 = "insert into multisql (id,name,class) values (3,a great news,see a lot)";String sql2 = "update multisql set id=3 , name=\‘modifiedName\‘,class=\‘mengNew\‘";String sql3 = "delete from multisql where id>0 and name=\‘modifiedName\‘";try{    Statement stmt = conn.createStatement();    stmt.addBatch(sql1);    stmt.addBatch(sql2);    stmt.addBatch(sql3);    /** 執行批處理sql */    stmt.executeBatch();    /** 清除已執行的sql */    stmt.clearBatch();}catch (Exception e){    System.out.println("批量處理SQL出錯!");    e.printStackTrace();}

 

2. PreparedStatement對象的批處理

 

PreparedStatement 類繼承子Statement類,通常我們可以直接用Statement類的引用指向PreparedStatement 類的對象,不過這裡對於多態,我還是不很理解,就不bb了。

 

優勢與劣勢: 

PreparedStatement類的批處理方法想資料庫發送的是編譯後的SQL語句,相比於上面調用Statement類的方法,效率有所提高。

PreparedStatement類的批處理方法,用於發送一組同種的SQL動作陳述式,例如:一組都是insert,或一組都是update、delete,因此常用於批量插入、大量刪除、批次更新欄位值等操作。而上面的方法則可發送一組不同操作

由於是一組同種操作,因此常常使用JDBC中內建的set 方法將欄位值等參數 “ 帶入 ” 到SQL語句中

這裡就沒有catch語句了,其實焦點都不在catch上。。。

try{    Statement stmt = conn.prepareStatement("insert into multisql (id,name,class) values (?,?,?)");    PreparedStatement ps = conn.prepareStatement("insert into multisql (id,name,class) values (?,?,?)");    ps.setInt(1,par_int);    ps.setString(2,"TheName");    ps.setString(3,"phone");    ps.addBatch();    cnt++;    if(cnt%1000==0){        ps.executeBatch();        ps.clearBatch();/** 清理SQL指令,避免Out of Memory */    }        /** 最終釋放記憶體 */    ps.close();

  

用JDBC操作MySQL——大量資料庫操作時使用批處理提速

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.