實現Java批量插入數據庫數據,在javaeye中看到過幾篇關於實現Java批量插入數據庫數據,轉載時沒有找到,就自己寫一下,也算是對自己學習過程中所遇到過的問題做一個總結。
一般關於批量向數據庫插入數據都採用PreparedStatement、Statement…………也包括直接使用JDBC API、框架…………
也看到過幾篇關於這些內容的總結,及大家的評論,以下爲我總結的關於批量向數據庫插入數據。
1,使用JDBC API實現配量插入數據:有篇文章介紹過關於JDBC API、Hibernate實現批量插入數據,採用JDBC API 方式實現隨着數據的增長,速度更勝於Hibernate。當然,對於這個測試的準確我並不保證,但是我也會優先選用JDBC API方式實現(原因:簡單、易學、相對於框架更通用,不會過時)。
2,採用PreparedStatement對象實現批量插入數據:PreparedStatement是真正的批處理命令,不是其他的僞批處理命令可以相比的(個人意見),它相對於其他的實現批量處理是非常的強大,比如字段不斷改變,每次都要從文件從新讀取就只能使用PreparedStatement對象來實現。再有就是存在即合理,既然PreparedStatement對象可以多次高效地執行預編譯的語句,就一定有其原因(JDk源碼沒有分析過,和Statement實現的區別不瞭解)。
3,實現批量插入數據庫數據
- Class.forName("com.mysql.jdbc.Driver");
- Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://" +
- "localhost:3306/excel2mysql", "wanle", "wanle");
- // 關閉事務自動提交
- con.setAutoCommit(false);
- SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");
- TimeZone t = sdf.getTimeZone();
- t.setRawOffset(0);
- sdf.setTimeZone(t);
- Long startTime = System.currentTimeMillis();
- PreparedStatement pst = (PreparedStatement) con.prepareStatement("insert into test04 values (?,'中國')");
- for (int i = 0; i < 10000; i++) {
- pst.setInt(1, i);
- // 把一個SQL命令加入命令列表
- pst.addBatch();
- }
- // 執行批量更新
- pst.executeBatch();
- // 語句執行完畢,提交本事務
- con.commit();
- Long endTime = System.currentTimeMillis();
- System.out.println("用時:" + sdf.format(new Date(endTime - startTime)));
- pst.close();
- con.close();
插入10000條數據用時3141毫秒,對於我已經很理想了, 畢竟我們不會使用MySQL進行非常大型項目的開發,對於10000條數據3秒多點,已經可以了,我相信對於大家應該也足以應付了,我們不會每天都插入10000條吧,當然對於我的話如果有這樣的需求,我不會選擇MySQL。
以上所有內容均爲對於我所學習使用過程中、實際項目開發中的總結,也應用於其中。對於批量插入,數據導入均採用這樣的方式。