jdbc插入100万条数据

2017-06-30 22:39:00    admin    2489    原创
摘要:jdbc插入100万条数据

PreparedStatement是预编译的,对于批量处理可以大大提高效率
使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处
在jdbc做批处理之前,没有设置手动提交,插入的速度很慢(conn.setAutoCommit(false);) 

自己写的例子如下:

 public static void main(String[] args) {
 try {
 SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 ");      
         Connection conn = ConnectDB.getConnection("MySQL", "127.0.0.1:3306/test_model", "root",
                 "123456");
         PreparedStatement statement = null;
         if (conn == null) {
             System.out.println("Connection the database is failled !");
         } else {
         conn.setAutoCommit(false); 
         statement = (PreparedStatement) conn.prepareStatement("INSERT INTO customers (name,title,create_time) value (?,?,?)");
         System.out.println("执行开始时间*********"+myFmt.format(new Date()));
         for(int i=1;i<=1000000;i++){
         statement.setString(1, "李小龙"+i);
         statement.setString(2, "long@live.com");
         statement.setString(3, myFmt.format(new Date()));
         statement.addBatch();
         if(i%1000==0){
         statement.executeBatch();
         statement.clearBatch();
         conn.commit();
        }
         }
         statement.executeBatch();  
         statement.clearBatch();  
             conn.commit();  
             ConnectDB.closeConn(conn); //关闭资源 
           // 4.2 调用Statement对象的executeUpdate(sql) 执行SQL 语句的插入
             System.out.println("执行结束时间***************"+myFmt.format(new Date()));
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }
 }
插入一百万的数据大概用了十三分钟



豫ICP备15006410号
蝉知 蝉知4.5.2