把最終測試效率最高的方式記錄一下,在mysql5.6下下面這種方式比batchUpdate的方式要快N倍
:java
package com.jdbc.batch; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class BufferQuery { private static Connection mysqlConn = null; private static ResultSet rs = null; // 總條數 private static int allCount = 10000; // 分批條數 private static int preCount = 1000; // 計數器 private static int count = 0; private static String insertSQL = "insert into users(firstname, lastname, age) values(?, ?, ?)"; private static PreparedStatement mysqlPs = null; public static void main(String[] args) throws SQLException { try { StringBuilder sb = new StringBuilder(); sb.append("insert into users(firstname, lastname, age) values"); mysqlConn = DBUtils.getMySqlConn(); mysqlPs = mysqlConn.prepareStatement(insertSQL); mysqlConn.setAutoCommit(false); long start = System.currentTimeMillis(); for (int i = 1; i <= allCount; i++) { if(i > 1) sb.append(","); sb.append("('aa"+ i +"','bb',23)"); if(i % preCount == 0){ System.out.println("導入進行===>" + (++count * preCount) + "條"); } } mysqlPs.executeUpdate(sb.toString()); long end = System.currentTimeMillis(); System.out.println("數據導入完畢,所用時間爲: " + (end - start) + " ms"); } catch (Exception e) { mysqlConn.rollback(); System.out.println("數據出錯,已進行回滾"); throw new RuntimeException(); } finally { mysqlConn.commit(); DBUtils.free(rs, mysqlPs, mysqlConn); } } }