JDBC往MYSQL高效批量插入数据
后端开发:【批量插入海量数据之Java插入MySql】解决方案
https://www.jianshu.com/p/a271600f0bda
JDBC实现往MySQL插入百万级数据
https://www.cnblogs.com/fnz0/p/5713102.html
处理 rewriteBatchedStatements=true
https://www.jianshu.com/p/0f4b7bc4d22c
步骤
1.先将要插入的数据组成在map中,再将map依次放入List中
HashMap<String,String> map = new HashMap<>(); map.put("createDate",createDate); map.put("ip",ip); map.put("userId",userId); map.put("referer",referer); map.put("method",method); map.put("useragent",useragent);
List<Map> dataList = new ArrayList<Map>(); dataList.add(map);
2.在统一遍历dataList 将数据批量插入MYSQL
for (int i = 0; i < dataList.size(); i ++) { ps.setString(1, (String) dataList.get(i).get("referer")); ps.setString(2,(String) dataList.get(i).get("userId")); ps.setString(3, (String) dataList.get(i).get("method")); ps.setString(4, (String) dataList.get(i).get("createDate")); ps.setString(5, (String) dataList.get(i).get("useragent")); ps.setString(6, (String) dataList.get(i).get("ip")); // 执行sql语句 // ps.executeUpdate(); ps.addBatch(); System.out.println("插入一条记录!!!"); } ps.executeBatch();
3.注意,此时JDBC连接URL字符串中需要新增一个参数:rewriteBatchedStatements=true
4.最终效果:在原先逐行插入为25633ms的基础上提高到181ms,感慨万千。
路很长,请保持耐心。