业务需求:
对一张20万左右的表中的某个字段做一个批量修改
其他方式修改时间太长怕数据库/服务器崩溃
在java中直连mysql 使用批处理的方式增删改
10万数据的修改大概2s左右
直接贴代码
//定义连接、statement对象
Connection conn = null;
PreparedStatement pstm = null;
private String url = "jdbc:mysql://localhost:3306/0217_mes?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=true&useServerPrepStmts=false";
// rewriteBatchedStatements=true&useServerPrepStmts=false
//上面URL中 这一段必加,开启批处理
private String user = "root";
private String password = "123456";
try {
//加载jdbc驱动
Class.forName("com.mysql.jdbc.Driver");
//连接mysql url:数据库连接地址
conn = DriverManager.getConnection(url, user, password);
//将自动提交关闭
// conn.setAutoCommit(false);
//编写sql 此处拼接SQL 增删改都 可以
String sql = "INSERT INTO sys_replace VALUES (?,?)";
//预编译sql
pstm = conn.prepareStatement(sql);
//开始总计时
long bTime1 = System.currentTimeMillis();
//ma 自己最开始组装好的数据集合
for (SysMaterial material : ma) {
//赋值 1代表上面拼接的SQL中的问号,1就是第一个问号,2就是第二个问号
pstm.setLong(1, material.getSysMaterialId());
pstm.setString(2, material.getRemark());
//添加到同一个批处理中
pstm.addBatch();
}
//执行批处理
pstm.executeBatch();
conn.close();
//关闭总计时
long eTime1 = System.currentTimeMillis();
//输出
System.out.println("插入数据共耗时:"+(eTime1-bTime1));
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}