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日

相关文章

  • 详解spring与jdbc整合操作

    详解spring与jdbc整合操作 1. Spring JDBC介绍 Spring JDBC是spring框架中最重要的部分之一,提供了一组用于执行SQL操作和访问关系型数据库的类和接口。 Spring JDBC提供的主要API为JdbcTemplate和NamedParameterJdbcTemplate,以及支持Transaction(事务)和DAO(数…

    Java 2023年5月20日
    00
  • java webApp异步上传图片实现代码

    下面是详细的java webApp异步上传图片实现代码的攻略: 一、介绍 本文将详细讲解如何在Java Web应用程序中实现异步上传图片的功能。异步上传可以提高上传的效率并提升用户体验。本文中的示例代码使用了Spring MVC框架,使用了jQuery的异步文件上传插件。 二、向项目中添加所需的库和插件 首先,需要将所需的库和插件添加到项目中。这些库包含Sp…

    Java 2023年6月2日
    00
  • java实现工资管理简单程序

    下面就让我来详细讲解“Java实现工资管理简单程序”的完整攻略。 1. 确定需求 首先我们需要确定程序的需求。根据题目的要求,我们需要实现一个工资管理简单程序,这个程序需要实现以下功能: 添加新员工的信息 计算员工工资 查询员工信息 删除员工信息 修改员工信息 基于以上需求,我们可以大致分析出需要用到的Java知识点: 类与对象的概念 静态变量与静态方法的概…

    Java 2023年5月19日
    00
  • SpringMVC程序简单实例

    SpringMVC程序简单实例 SpringMVC是一种基于Java的Web框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发Web应用程序。本文将详细讲解如何使用SpringMVC创建一个简单的Web应用程序,并提供两个示例来说明如何实现这一过程。 步骤一:创建SpringMVC项目 在开始使用SpringMVC创建Web应用程序之前,我们需…

    Java 2023年5月17日
    00
  • Java吃货联盟订餐系统代码实例

    这里是一份详细的“Java吃货联盟订餐系统代码实例”的完整攻略。 前言 本文将介绍一个简单易学的订餐系统代码实例,它是一个Java Web应用程序,旨在演示如何用Java创建和部署Web应用程序,并使用Maven和Tomcat等常见的工具和框架。 设计思路 该订餐系统具备基本的用户注册、登录、添加菜品到购物车、下单等功能,让用户可以在线订餐,而店家可以方便地…

    Java 2023年5月31日
    00
  • 什么是类加载的委派模型?

    简介 Java语言采用的是基于类的面向对象编程思想,当Java程序需要使用一个类时,它会根据类的名称来寻找对应的字节码文件,并将字节码文件加载到JVM中。类加载的委派模型是指,当Java程序需要加载一个类时,先委派父类加载器去加载该类,如果父类加载器无法加载该类,则交给当前类加载器自行加载。 工作原理 类加载的委派模型是Java虚拟机(JVM)用来保证Jav…

    Java 2023年5月10日
    00
  • Linux 下java jps命令使用解析详解

    Linux 下 java jps 命令使用解析详解 Java 程序在运行的时候,如果需要查看当前 Java 进程,可以使用 jps 命令。本文通过详细介绍各个参数以及示例,帮助用户更好地使用 jps 命令。 为什么要使用 jps 命令 jps 命令用于查看当前 Java 进程的进程 ID (PID) 以及启动类的类名 (fully qualified nam…

    Java 2023年5月26日
    00
  • java中@DateTimeFormat和@JsonFormat注解的使用

    讲解java中@DateTimeFormat和@JsonFormat注解的使用。 @DateTimeFormat和@JsonFormat注解的概述 在Java中,我们常常需要处理日期和时间相关的数据,而日期和时间的格式化是一个必须注意的问题。@DateTimeFormat和@JsonFormat都是Spring框架中的注解。它们可以为Java中的日期和时间类…

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