mysql批量添加数据

来源:互联网 发布:毕向东java基础课件 编辑:程序博客网 时间:2024/05/18 00:00

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
保存




原创粉丝点击