Java实现几十万条数据插入实例教程(30万条数据插入MySQL仅需13秒)

这篇文章主要介绍如何使用Java实现大批量数据插入到MySQL数据库中,并给出了具体实现的教程和示例代码。下面是详细的攻略流程:

1. 数据准备

首先需要准备数据,可以是一组代表性数据样例集或随机生成的大规模数据,此处以随机生成数据为例。可以使用Java中的Random类来生成随机数据。

2. MySQL数据库连接

使用Java语言连接MySQL数据库,这里需要用到JDBC驱动程序和MySQL的JDBC连接URL。JDBC驱动程序可以从MySQL官网进行下载,而JDBC连接URL的格式为“jdbc:mysql://hostname:port/databaseName”。

3. 批量插入数据

使用JDBC的Statement或PreparedStatement类将生成的数据批量插入到MySQL数据库中。据介绍,使用PreparedStatement类相比Statement类的效率更高,所以建议优先使用后者。具体实现步骤如下:

  1. 创建连接mysql数据库的PreparedStatement对象。
Connection conn = DriverManager.getConnection(driverUrl, user, password);
PreparedStatement pst = conn.prepareStatement(sql);
  1. 设置insert语句的参数。
pst.setString(1, "name");
pst.setInt(2, 30);
pst.setDouble(3, 1000.0);
  1. 执行批量插入操作。
pst.addBatch();
pst.executeBatch();

4. 性能优化

在实际的批量插入操作中,可能遇到插入数据量过大、插入速度过慢的情况。为了提高效率,可以使用以下性能优化方法:

  1. 数据库开启事务,使用事务包裹批量插入操作,统一提交,可以减少事务提交的次数,提高处理效率。
  2. 对插入数据量很大的表使用分表技术,将表拆分成多个小表,减少单表的数据量,提高插入效率。
  3. 关闭数据库日志,防止在批量插入操作过程中由于频繁记录日志导致效率降低。

示例说明

示例1:批量生成数据并插入MySQL数据库

下面的示例演示了如何使用Java生成大批量的数据并插入到MySQL数据库中。

//准备数据
List<People> peopleList = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 100000; i++) {
    People people = new People();
    people.setName("name" + i);
    people.setAge(random.nextInt(100));
    people.setSalary(random.nextDouble() * 10000);

    peopelList.add(people);
}

//创建连接和PreparedStatement对象
conn = DriverManager.getConnection(driverUrl, user, password);
String sql = "INSERT INTO people(name,age,salary) VALUES(?,?,?)";
PreparedStatement pst = conn.prepareStatement(sql);

//设置参数和执行批量插入操作
for (int i = 0; i < peopleList.size(); i++) {
    People people = peopleList.get(i);
    pst.setString(1, people.getName());
    pst.setInt(2, people.getAge());
    pst.setDouble(3, people.getSalary());
    pst.addBatch();
    if ((i + 1) % batchSize == 0) {
        pst.executeBatch();
        pst.clearBatch();
    }
}
pst.executeBatch();
pst.clearBatch();

示例2:优化批量插入,提高效率

此示例是在示例1的基础上进行了性能优化的过程,主要通过设置事务回滚、关闭日志等方式提高插入效率。

conn = DriverManager.getConnection(driverUrl, user, password);
//设置自动提交为false,开启事务
conn.setAutoCommit(false);
//先做一些数据库的设置
Statement st = conn.createStatement();
st.execute("SET GLOBAL max_allowed_packet=1024*1024*100");
st.execute("SET unique_checks=0");
st.execute("SET foreign_key_checks=0");
st.execute("SET sql_log_bin=0");
st.execute("ALTER TABLE people DISABLE KEYS");

PreparedStatement pst = conn.prepareStatement(sql);

//设置参数和执行批量插入操作
for (int i = 0; i < peopleList.size(); i++) {
    People people = peopleList.get(i);
    pst.setString(1, people.getName());
    pst.setInt(2, people.getAge());
    pst.setDouble(3, people.getSalary());
    pst.addBatch();
    if ((i + 1) % batchSize == 0) {
        pst.executeBatch();
        pst.clearBatch();
    }
}

pst.executeBatch();
pst.clearBatch();
//提交事务
conn.commit();
//恢复数据库的设置
st.execute("SET unique_checks=1");
st.execute("SET foreign_key_checks=1");
st.execute("SET sql_log_bin=1");
st.execute("ALTER TABLE people ENABLE KEYS");

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现几十万条数据插入实例教程(30万条数据插入MySQL仅需13秒) - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Java中classpath讲解及使用方式

    Java中classpath讲解及使用方式 什么是classpath? classpath是一个环境变量,用于告诉Java虚拟机在哪里查找已编译的类文件。在Java中,类文件通常存储在文件系统中的某个位置,classpath指定了Java在哪里查找这些文件。通过设置classpath,我们可以使Java VM在任何地方都能找到所需的类文件。 classpat…

    Java 2023年5月26日
    00
  • Java新手教程之ArrayList的基本使用

    Java新手教程之ArrayList的基本使用 简介 ArrayList是Java集合类中的一种,可以动态地增加或减少容器中的元素。它是数组的一种替代方案,提供了更加灵活和方便的集合管理方式。 用法 ArrayList可以存储任意类型的对象,包括基本数据类型和自定义对象。下面是一些ArrayList的基本用法。 创建一个ArrayList ArrayList…

    Java 2023年5月26日
    00
  • 5分钟让你快速掌握java8 stream常用开发技巧

    5分钟让你快速掌握java8 stream常用开发技巧 什么是Stream Java 8引入Stream这个API是为了简化集合操作。Stream可以使用filter、map、reduce等方法对集合进行处理。在操作集合时,Stream会把操作分为中间操作和终止操作两种。中间操作用于筛选和转换数据,终止操作用来搜集数据。Stream不改变原来的集合数据,而是…

    Java 2023年5月26日
    00
  • Mybatis Plus使用XML编写动态sql的超简易方法

    下面详细讲解”Mybatis Plus使用XML编写动态SQL的超简易方法”。 简介 Mybatis Plus是Mybatis的增强工具,可以用来简化Mybatis的开发。Mybatis Plus默认使用了entity的字段映射表中的字段,但是在实际开发过程中,我们经常会遇到重用entity映射表中同一个字段做不同的条件查询的情况,这时候我们就需要用XML来…

    Java 2023年5月20日
    00
  • java登录验证码实现代码

    实现Java登录验证码的代码,可以使用Java的第三方开源框架Kaptcha。下面是详细步骤。 Kaptcha安装 下载jar包 在Kaptcha官网上下载最新的jar包。 导入jar包 将下载的jar包导入项目的Classpath路径下。 Kaptcha使用 添加JSP页面代码 在需要验证码的登录页面的form标签中添加如下代码: “`html 验证码

    Java 2023年5月23日
    00
  • 解决Android 源码编译错误的问题

    解决Android源码编译错误的问题需要我们进行一些常见的处理方法。 1. 安装依赖包 在编译Android源码之前,我们需要安装一些依赖包,以确保编译过程中不会出错。常见的依赖包有如下几种: $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl z…

    Java 2023年5月26日
    00
  • 基于Spring Boot保护Web应用程序

    下面我将详细讲解基于Spring Boot保护Web应用程序的完整攻略。 1. 目标 保护Web应用程序是非常重要的,因为Web应用程序经常面临各种来自外部的威胁,如SQL注入、跨站脚本、会话劫持等。本攻略的目标是使用Spring Boot防御这些攻击并保护Web应用程序的安全。具体来说,我们将使用以下方法来实现这个目标: 基于Spring MVC和Thym…

    Java 2023年6月3日
    00
  • java的jps命令使用详解

    Java的jps命令使用详解 jps命令是Java提供的一个实用工具,用于显示当前机器上所有正在运行的Java进程以及它们的PID(进程标识符)和类名。它通常被用于快速查看Java进程的运行状态,因此是Java程序调试和性能优化的重要工具之一。 语法 jps 命令的基本语法如下: jps [ options ] [ hostid ] 其中,hostid 指定…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部