随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

当向MySQL数据库中添加数据的时候一般都是一个一个地设置参数然后执行添加操作,这样在处理大量数据的时候会严重影响程序性能,所以就要使用批处理(一批一批地添加)

批处理的原理其实就是将设置的参数放进集合,然后再一起传入SQL中。

代码测试:

先创建一个表account:

package jdbcDemo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.jupiter.api.Test;
import JDBC.JdbcUtils;

public class Demo2 {
    /**
     * 进行批处理
     * @throws Exception 
     */
    @Test
    public void fun1() throws Exception {
        /**
         * pstmt:
         *     添加参数到批中
         *     执行批
         */
        // 连接SQL对象
        Connection conn = JdbcUtils.getConnection();
        // SQL模板
        String sql = "INSERT INTO account VALUES(?,?,?)";
        // pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        
        
        // 大量地添加参数
        for(int i = 1;i < 10000; i++ ) {
            pstmt.setInt(1, i);
            pstmt.setString(2, "emp_" + i);
            pstmt.setDouble(3, (Math.log(i)+1.0));
            
            // 添加批,这一组参数会保存到集合中
            pstmt.addBatch();
        }
        long start = System.currentTimeMillis();    // 得到当前时间的毫秒值
        pstmt.executeBatch();    // 执行批!
        long end = System.currentTimeMillis();    // 得到当前时间的毫秒值
        System.out.println("用时: " + ((end - start  - (end - start)%100.0)/1000.0) + " s   " + (end - start) + " ms");
    }
}

此时数据库的url为:

url = jdbc:mysql://localhost:3306/db1

执行程序查看用时:

将数据库的url修改为批处理支持:

url = jdbc:mysql://localhost:3306/db1?rewriteBatchedStatements=true

先删除掉表中的原有数据,然后再次执行:

能够很明显地发现时间极大地减少了。

 

posted on 2022-05-05 14:20  时间完全不够用啊  阅读(189)  评论(0编辑  收藏  举报