测试过几种方法:
1.使用mybatis框架插入,十万条数据大概需要6分钟(不推荐)
2.用jdbc插入,20万条数据只需要8s,推荐
下面说一下使用jdbc插入:
编写一个测试类:
public class insetrt {
private Stringurl ="jdbc:mysql://localhost:3306/taotao?rewriteBatchedStatements=true";
private Stringuser ="root";
private Stringpassword ="123";
@Test
public void jdbcInsert(){
Connection conn =null;
PreparedStatement pstm =null;
ResultSet rt =null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection(url,user,password);
String sql ="INSERT INTO tab_user2(id,user_name,age,job,sal) VALUES(null,?,60,'演员',?)";
pstm = (PreparedStatement) conn.prepareStatement(sql);
long start = System.currentTimeMillis();
for (int i =0; i <200000; i++) {
pstm.setString(1,"周润发"+i);
pstm.setDouble(2,300000+i);
pstm.addBatch();
}
pstm.executeBatch();
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}catch (Exception e) {
e.printStackTrace();
}finally {
if (conn!=null){
try {
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
if (pstm!=null){
try {
pstm.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
注意黑色加粗部分,rewriteBatchedStatements=true 开启批量插入,插入只执行一次,所有插入比较快
修改mysql的max_allowed_packet,如果jdbc最大连接包太小,会报错,所以需要修改
修改步骤如下:
1. show VARIABLES like '%max_allowed_packet%'; 执行语句查询最大包长度
2. set global max_allowed_packet = 300*1024*1024;执行语句设置最大包长度,改为300M
再次查询,会发现长度变了
max_allowed_packet 314572800
如果修改不成功,在mysql文件下找到my.ini文件,在【mysqlId】下添加一个配置:
max_allowed_packet = 300M
最后重启mysql,再次查询,长度发生变化了,再次执行批量插入,就不会报错了。
网友评论