批量往資料庫新增資料
阿新 • • 發佈:2018-12-10
聽老師提到,往資料庫中新增百萬,千萬條條的資料的所需時間。自己試著去看了下列印了零到十萬的所需時間,結果大概四分鐘的樣子。顯然對資料庫進行修改的話需要更多的時間。實際所需時間顯然也不可能是多開幾個執行緒就能解決的,於是乎去搜索了方法,找到了這個一串程式碼(修改過了)
Connection conn = getCon(); //獲取連線已經封裝過的方法 try { conn.setAutoCommit(false); Long beginTime = System.currentTimeMillis(); //構造預處理statement PreparedStatement pst = conn.prepareStatement("insert into ib1 values (?)"); //新增次數 for(int i=1;i<=10000;i++){ pst.setInt(1, i); pst.addBatch(); //每1000次提交一次 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) { e.printStackTrace(); } }
對照API看了下,大致就是先堆積大量的資料再一起提交。試了一下,如果是簡單的資料,即便新增百萬,千萬條資料也僅需要若干秒。但是這裡面的賦值 i ,我想的是依次賦值1-10000,但是實際上在資料庫中查詢這個表的資料時,第一條資料的值是並不是1,而是從一個範圍內的數開始,知道10000後才輪到1,想了半天也沒明白是為什麼。