有時候,我們使用資料庫的時候,如何快速的新增測試資料到資料庫中,做測試呢,新增100W 資料,如果使用工具的話可能很慢,這裡我推薦大家使用 PreparedStatement 預編譯 去進行操作:
單執行緒操作 ,測試 只需要 20秒 如果欄位少的話,可以到幾秒鐘插入100w資料
public static void main(String[] args) { long start = System.currentTimeMillis(); conn(); long end = System.currentTimeMillis(); System.out.println("耗時:" + (end - start)/1000 + "秒"); } public static void conn(){ //1.匯入驅動jar包 //2.註冊驅動(mysql5之後的驅動jar包可以省略註冊驅動的步驟) //Class.forName("com.mysql.jdbc.Driver"); //3.獲取資料庫連線物件 Connection conn = null; PreparedStatement pstmt = null; { try { //"&rewriteBatchedStatements=true",一次插入多條資料,只插入一次 conn = DriverManager.getConnection("jdbc:mysql://134.175.66.149:3306/test?" + "&rewriteBatchedStatements=true&serverTimezone=UTC","root","B5IWfkqW8uu36J"); //4.定義sql語句 String sql = "insert into user values(default,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; //5.獲取執行sql的物件PreparedStatement pstmt = conn.prepareStatement(sql); //6.不斷產生sql for (int i = 0; i < 1000000; i++) { pstmt.setString(1,(int)(Math.random()*1000000)+""); pstmt.setString(2,(int)(Math.random()*1000000)+""); pstmt.setString(3,(int)(Math.random()*1000000)+""); pstmt.setString(4,(int)(Math.random()*1000000)+""); pstmt.setString(5,(int)(Math.random()*1000000)+""); pstmt.setString(6,(int)(Math.random()*1000000)+""); pstmt.setString(7,(int)(Math.random()*1000000)+""); pstmt.setString(8,(int)(Math.random()*1000000)+""); pstmt.setString(9,(int)(Math.random()*1000000)+""); pstmt.setString(10, DateUtil.now()); pstmt.setString(11,(int)(Math.random()*1000000)+""); pstmt.setString(12,DateUtil.now()); pstmt.setString(13,(int)(Math.random()*1000000)+""); pstmt.setString(14,(int)(Math.random()*1000000)+""); pstmt.setString(15,(int)(Math.random()*1000000)+""); pstmt.setString(16,(int)(Math.random()*1000000)+""); pstmt.setString(17,(int)(Math.random()*1000000)+""); pstmt.setString(18,(int)(Math.random()*1000000)+""); pstmt.setString(19,(int)(Math.random()*1000000)+""); pstmt.setString(20,(int)(Math.random()*1000000)+""); pstmt.addBatch(); } //7.往資料庫插入一次資料 pstmt.executeBatch(); System.out.println("新增1000000條資訊成功!"); } catch (SQLException e) { e.printStackTrace(); } finally { //8.釋放資源 //避免空指標異常 if(pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }