mysql批量添加数据
程序员文章站
2022-07-13 13:11:42
...
1、开启mysql的批量处理能力
在连接url后面添加 ?useServerPrepStmts=false&rewriteBatchedStatements=true
如:jdbc:mysql://127.0.0.1:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true
2、步骤
设置不自动提交 conn.setAutoCommit(false);
编写insert 语句
循环处理数据
提交事务
具体代码如下:
public void addBatch(List<BookInfo> bookInfos, Connection conn){
PreparedStatement pstmt = null;
try {
String sql = "INSERT INTO `book_info` (`b_field1`,`b_field2`,`b_field3`) VALUES (?,?,?)";
conn.setAutoCommit(false); // 设置手动提交
int count = 0;
pstmt = conn.prepareStatement(sql);
for (BookInfo bookInfo : bookInfos) {
int index = 1;
pstmt.setObject(index++, bookInfo.getField1());
pstmt.setObject(index++, bookInfo.getField2());
pstmt.setObject(index++, bookInfo.getField3());
pstmt.addBatch(); // 加入批量处理
count++;
}
pstmt.executeBatch(); // 执行批量处理
conn.commit(); // 提交
System.out.println("BookInfo addBatch All down : " + count);
} catch (Exception e) {
LogUtils.error("BookInfo addBatch出错", e);//记录错误日志
try {
conn.rollback();//回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
DBPoolUtils.closeAll(conn, pstmt);//关闭连接
}
}
注意以上bookInfos的大小取决于mysql的my.ini配置,如果数据量很大可以优化配置,具体步骤如下:
修改 bulk_insert_buffer_size=120M 或者更大,默认是8M
将insert语句的长度设为最大。
Max_allowed_packet=1M
Net_buffer_length=8k
保存
上一篇: jQuery 选择器