軟件測試中使用JDBC插入大量數據的性能測試
使用jdbc向數據庫插入100000條記錄,分別使用statement,PreparedStatement,及PreparedStatement+批處理3種方式進行測試:
1、使用statement插入100000條記錄
public void exec(Connection conn){
try { Long beginTime = System.currentTimeMillis(); conn.setAutoCommit(false);//設置手動提交 Statement st = conn.createStatement(); for(int i=0;i<100000;i++){ String sql="insert into t1(id) values ("+i+")"; st.executeUpdate(sql); } Long endTime = System.currentTimeMillis(); System.out.println("st:"+(endTime-beginTime)/1000+"秒");//計算時間 st.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
2、使用PreparedStatement對象
public void exec2(Connection conn){
try { Long beginTime = System.currentTimeMillis(); conn.setAutoCommit(false);//手動提交 PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)"); for(int i=0;i<100000;i++){ pst.setInt(1, i); pst.execute(); } conn.commit(); Long endTime = System.currentTimeMillis(); System.out.println("pst:"+(endTime-beginTime)/1000+"秒");//計算時間 pst.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
3、使用PreparedStatement + 批處理
public void exec3(Connection conn){
try { conn.setAutoCommit(false); Long beginTime = System.currentTimeMillis(); PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)"); for(int i=1;i<=100000;i++){ pst.setInt(1, i); pst.addBatch(); if(i%1000==0){//可以設置不同的大;如50,100,500,1000等等 pst.executeBatch(); conn.commit(); pst.clearBatch(); } } Long endTime = System.currentTimeMillis(); System.out.println("pst+batch:"+(endTime-beginTime)/1000+"秒"); pst.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |
在Oracle 10g中測試,結果:
1、使用statement耗時142秒;
2、使用PreparedStatement耗時56秒;
3、使用PreparedStatement + 批處理耗時:
a.50條插入一次,耗時5秒;
b.100條插入一次,耗時2秒;
c.1000條以上插入一次,耗時1秒;
通過以上可以得出結論,在使用jdbc大批量插入數據時,明顯使用第三種方式(PreparedStatement + 批處理)性能更優。
當使用sqlserver 2000進行測試時,第三種方式最少耗時5秒,從這方面可以看出Oracle在處理大量數據時,明顯性能更強。
文章來源于領測軟件測試網 http://www.kjueaiud.com/