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();
}
}
插入一百万的数据大概用了十三分钟