我是靠谱客的博主 外向黑米,最近开发中收集的这篇文章主要介绍MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.当需要成批插入或者更新记录时。可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。

2.JDBC的批量处理语句包括下面两个方法:

  • addBatch(String):添加需要批量处理的SQL语句或是参数;
  • executeBatch():执行批量处理语句

通常我们会遇到两种批量执行SQL语句的情况:

  • 多条SQL语句的批量处理
  • 一个SQL语句的批量传参

代码(3种批量处理方式对比):

复制代码

package com.litian.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;

/**
 * @author: Li Tian
 * @contact: litian_cup@163.com
 * @software: IntelliJ IDEA
 * @file: JDBCTest4.java
 * @time: 2020/4/4 14:18
 * @desc: |批量处理事务
 */

public class JDBCTest4 {

    public static void main(String[] args){
        // testStatement();
        testPrepareStatement();
    }

    /**
     * 向数据库的数据表中插入10w条记录
     * 测试如何插入,用时最短
     * 1. 使用Statement:15038
     */
    public static void testStatement() {
        Connection conn = null;
        Statement st = null;
        String sql = null;
        try {
            conn = JDBCTools.getConnection();
            JDBCTools.beginTx(conn);
            st = conn.createStatement();

            long begin = System.currentTimeMillis();
            for (int i = 0; i < 100000; i++) {
                sql = String.format("insert into t_user2(username, pwd) values(name_%d, 6666)", i);
                st.executeUpdate(sql);
            }
            long end = System.currentTimeMillis();
            System.out.println(end - begin);

            JDBCTools.commit(conn);
        } catch (Exception e) {
            e.printStackTrace();
            JDBCTools.rollback(conn);
        } finally {
            JDBCTools.release(null, st, conn);
        }
    }

    /**
     * 向数据库的数据表中插入10w条记录
     * 测试如何插入,用时最短
     * 2. 使用PreparedStatement:13131
     * 3. 在2的基础上使用批量处理:24596?这就很尴尬了
     */
    public static void testPrepareStatement() {
        Connection conn = null;
        PreparedStatement st = null;
        String sql = null;
        try {
            conn = JDBCTools.getConnection();
            JDBCTools.beginTx(conn);
            sql = "insert into t_user2(username, pwd) values(?,?)";
            st = conn.prepareStatement(sql);

            long begin = System.currentTimeMillis();
            for (int i = 0; i < 100000; i++) {
                st.setString(1, "name_" + i);
                st.setString(2, "6666");
                st.executeUpdate();

                // “积攒”sql语句
                st.addBatch();;
                // 当积攒到一定程度,就统一地执行一次,并且清空先前积攒的sql
                if((i + 1) % 300 == 0){
                    st.executeBatch();
                    st.clearBatch();
                }
            }

            // 若总条数不是批量数值的整数倍,则还需要额外再执行一次
            if(100000 % 300 != 0){
                st.executeBatch();
                st.clearBatch();
            }

            long end = System.currentTimeMillis();
            System.out.println(end - begin);

            JDBCTools.commit(conn);
        } catch (Exception e) {
            e.printStackTrace();
            JDBCTools.rollback(conn);
        } finally {
            JDBCTools.release(null, st, conn);
        }
    }
}

最后

以上就是外向黑米为你收集整理的MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率的全部内容,希望文章能够帮你解决MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部