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实现文件及文件夹的删除

    当需要删除一个文件或文件夹时,我们可以使用Java中的File类的delete()方法来完成。本文将详细讲解Java实现文件及文件夹的删除的完整攻略。 删除文件 删除文件的过程非常简单,只需要创建一个File对象,然后调用delete()方法即可。 示例代码: File file = new File("path/to/file"); i…

    Java 2023年5月19日
    00
  • 在RedHat系统上安装JDK与Tomcat的步骤

    将在RedHat系统上安装JDK和Tomcat的步骤分为以下几个步骤: 下载JDK并安装 访问Oracle官网的下载页面:https://www.oracle.com/java/technologies/javase-jdk16-downloads.html,选择对应的版本并下载JDK的安装文件。 将下载后的文件上传到RedHat系统中合适的文件夹中,如/o…

    Java 2023年5月19日
    00
  • java实现Runnable接口适合资源的共享

    在Java中,线程可以通过实现Runnable接口来创建。Runnable接口中定义了一个run()方法,该方法中包含了线程要执行的代码。多个线程可以共享同一个Runnable对象,从而实现资源的共享。 SharedResource类是需要被共享的资源类。下面是一段通过实现Runnable接口来共享SharedResource对象的示例代码: public …

    Java 2023年5月26日
    00
  • java+io+swing实现学生信息管理系统

    Java+IO+Swing实现学生信息管理系统 学生信息管理系统是一款常见的管理工具,它可以帮助学校、老师或管理员轻松地管理学生的信息。本篇攻略将会使用Java语言结合IO和Swing技术来实现学生信息管理系统。 1. 项目搭建 首先打开你喜欢的IDE,选择新建Java项目,并添加Swing库。 然后新建一个Main类,它将作为程序的入口点。接下来,创建一个…

    Java 2023年5月24日
    00
  • Java十分钟精通类 封装 继承

    Java 十分钟精通类 封装 继承 Java 是面向对象编程语言,其中类、封装和继承是 OOP 的核心概念。在本文中,我们将介绍如何使用 Java 快速掌握这些概念。 类 在 Java 中,类是一种用于描述对象的结构。通过类定义,我们可以定义一个对象的属性和行为,从而为对象提供一个有意义的结构。Java 中的类定义如下: public class Class…

    Java 2023年5月26日
    00
  • Java定时任务的三种实现方式

    下面就整理一份详细讲解Java定时任务的三种实现方式的攻略: Java定时任务的三种实现方式 在Java应用程序中,我们经常需要实现定时任务,比如定时执行一些批处理任务、定时发送消息、定时执行数据同步任务等。本文将介绍Java定时任务的三种实现方式,包括使用Java Timer类、使用Spring框架的@Scheduled注解和使用Quartz调度框架。 1…

    Java 2023年5月18日
    00
  • 基于字符集、字符编码与HTTP编码解码之万象详解

    关于“基于字符集、字符编码与HTTP编码解码之万象详解”的攻略,我将分成以下几个部分进行详细介绍,以期达到完整性详细的标准: 基本概念 字符集 字符集是一系列字符的集合,每个字符有对应的编号和名称。常见的字符集有 ASCII、GB2312、UTF-8 等。 字符编码 字符编码是将一个字符集中的字符编号映射成计算机内部二进制编码的方法。其中,ASCII 码是最…

    Java 2023年6月1日
    00
  • Spring JdbcTemplate实现添加与查询方法详解

    我们来详细讲解一下“Spring JdbcTemplate实现添加与查询方法详解”的完整攻略。 一、什么是JdbcTemplate? JdbcTemplate是Spring框架中用来简化JDBC访问的类,通过JdbcTemplate可以简单而且明了地编写JDBC相关代码。相对于纯JDBC,JdbcTemplate有以下优势: JdbcTemplate回调函数…

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