使用JDBC在MySQL数据库中如何快速批量插入数据

yizhihongxing

使用JDBC在MySQL数据库中进行批量插入数据可以大大提高数据插入的效率。以下是详细步骤:

1.导入MySQL JDBC驱动

首先需要在Java项目中导入MySQL JDBC驱动包,这里以MySQL 8为例,可以从以下链接中下载:https://dev.mysql.com/downloads/connector/j/

2.创建JDBC连接

使用JDBC连接MySQL数据库需要以下信息:

  • 数据库URL
  • 数据库用户名
  • 数据库密码
String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
String username = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url, username, password);

3.创建批处理Statement

需要使用prepareStatement方法创建一个PreparedStatement对象,然后使用addBatch方法将要插入的SQL语句添加到批处理中。

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)");
pstmt.setString(1, "张三");
pstmt.setInt(2, 18);
pstmt.addBatch();

pstmt.setString(1, "李四");
pstmt.setInt(2, 20);
pstmt.addBatch();

pstmt.setString(1, "王五");
pstmt.setInt(2, 22);
pstmt.addBatch();

上面的示例中,我们要将3条记录批量插入到student表中,通过setStringsetInt方法设置要插入数据的值,然后通过addBatch方法将SQL语句添加到批处理中。

4.执行批处理操作

调用executeBatch方法执行批处理操作,并将返回结果存储在一个int类型数组中。

int[] result = pstmt.executeBatch();

如果返回结果数组中的某个值为-2,则表示插入数据的主键是自动生成的,我们可以通过getGeneratedKeys方法获取插入数据的主键。

ResultSet rs = pstmt.getGeneratedKeys();
while (rs.next()) {
    int id = rs.getInt(1);
    System.out.println("插入数据的主键为:" + id);
}

5.关闭JDBC连接

使用完JDBC连接对象、PreparedStatement对象、ResultSet对象后,需要及时关闭它们。在Java 7及以上版本中,可以使用try-with-resources语句自动关闭这些资源。

try (ResultSet rs = pstmt.getGeneratedKeys();
     PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)")) {
    // 执行批处理操作
    int[] result = pstmt.executeBatch();

    // 遍历结果集获取插入数据的主键
    while (rs.next()) {
        int id = rs.getInt(1);
        System.out.println("插入数据的主键为:" + id);
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    try {
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

示例1:使用JDBC批量插入1000条数据

下面是一个简单示例,使用批处理插入1000条数据。

public static void batchInsert() throws SQLException {
    String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
    String username = "root";
    String password = "password";
    Connection conn = DriverManager.getConnection(url, username, password);

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)");

    for (int i = 0; i < 1000; i++) {
        pstmt.setString(1, "张三" + i);
        pstmt.setInt(2, 18 + i);
        pstmt.addBatch();
    }

    int[] result = pstmt.executeBatch();
    System.out.println("成功插入" + result.length + "条数据");

    pstmt.close();
    conn.close();
}

示例2:从CSV文件中读取数据批量插入到MySQL数据库中

我们可以从CSV文件中读取数据批量插入到MySQL数据库中,以下是示例代码:

public static void batchInsertFromCSVFile(String filePath) throws IOException, SQLException {
    String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
    String username = "root";
    String password = "password";
    Connection conn = DriverManager.getConnection(url, username, password);

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)");

    try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
        String line;
        while ((line = br.readLine()) != null) {
            String[] values = line.split(",");
            pstmt.setString(1, values[0]);
            pstmt.setInt(2, Integer.parseInt(values[1]));
            pstmt.addBatch();
        }
    }

    int[] result = pstmt.executeBatch();
    System.out.println("成功插入" + result.length + "条数据");

    pstmt.close();
    conn.close();
}

在调用该方法时,需要传入一个CSV文件的路径和文件名作为参数,例如:"C:/data.csv"。其中,数据文件中每一行的数据格式为:"姓名,年龄",例如:"张三,18"。

以上就是使用JDBC在MySQL数据库中进行批量插入数据的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用JDBC在MySQL数据库中如何快速批量插入数据 - Python技术站

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

相关文章

  • 浅析Java的Hibernate框架中的缓存和延迟加载机制

    浅析Java的Hibernate框架中的缓存和延迟加载机制 Hibernate是一个广泛使用的Java对象关系映射(ORM)框架,用于将数据库中的数据映射到Java程序中的对象上。Hibernate中的缓存和延迟加载机制是其非常重要的特性之一,下面将会详细介绍这两个机制。 Hibernate中的缓存机制 Hibernate中的缓存机制用于在Hibernate…

    Java 2023年5月20日
    00
  • node连接kafka2.0实现方法示例

    下面是详细讲解“node连接kafka2.0实现方法示例”的完整攻略。 简介 kafka 是由 Apache 软件基金会开发的一个分布式流处理平台。它由 Scala 和 Java 写成。Kafka 是一个强大、高吞吐量的分布式系统,它可以处理海量的消息,并且提供了很好的消息存储和查询能力。Node.js 中有多个 kafka client 库可供使用,本文主…

    Java 2023年6月2日
    00
  • Java动态代理的实现原理是什么?

    Java动态代理的实现原理主要是基于Java反射机制实现的。Java动态代理可以在程序运行时动态地生成代理对象,而不需要事先编写代理类的源代码。这种技术是AOP(面向切面编程)的实现方式之一,可以很方便地实现非功能性的需求,如日志记录、性能统计、事务处理等。 实现Java动态代理,需要以下步骤: 定义需要被代理的接口或类 实现InvocationHandle…

    Java 2023年5月10日
    00
  • 详解Java中自定义注解的使用

    下面是详解Java中自定义注解的使用的完整攻略。 什么是注解 注解是Java语言中的元数据,是JDK5.0版本以后新增的特性。它可以为Java代码提供额外的信息,被用于代码的分析、编译和运行时的处理等操作。注解本身不会对代码的逻辑产生影响,它只是提供了额外的元数据信息,使得程序员可以在代码上进行更精细的控制。 自定义注解的基本结构 自定义注解定义格式位于Ja…

    Java 2023年5月26日
    00
  • spring AOP定义AfterThrowing增加处理实例分析

    下面为您详细讲解Spring AOP定义AfterThrowing增加处理实例的完整攻略。 什么是Spring AOP? Spring AOP(Aspect Oriented Programming)是Spring框架的一个重要特性,主要为了解决在面向对象编程中的一些常见问题,如日志等处理。 Spring AOP主要是通过代理和横切面实现的,代理是对目标对象…

    Java 2023年5月19日
    00
  • 详解Java动态字节码技术

    详解 Java 动态字节码技术攻略 什么是 Java 动态字节码技术 Java 动态字节码技术是一种在程序运行时动态地生成和修改 Java 类字节码的技术。它利用动态字节码生成器,将类文件以二进制流的形式加载到 JVM 内存中,然后通过更改字节码指令,并生成新的字节码文件来实现对现有程序的动态修改。 如何应用 Java 动态字节码技术 Java 动态字节码技…

    Java 2023年5月26日
    00
  • 类卸载的实现原理是什么?

    类卸载是指在代码执行过程中,由于某种原因,已加载的类被卸载并从JVM中移除。Java虚拟机规范并没有明确要求JVM自动实现卸载机制,但目前大部分虚拟机都支持类卸载。 实现类卸载的原理是基于类的生命周期。当一个类不再需要时,JVM会从内存中卸载它。在类被卸载之前,JVM需要保证该类不再被引用。如果某个类已经被加载并引用了,在程序中不再引用该类的对象后,JVM会…

    Java 2023年5月11日
    00
  • vue 实现axios拦截、页面跳转和token 验证

    下面我将详细讲解“Vue 实现 Axios 拦截、页面跳转和 Token 验证”的完整攻略。 简介 在 Vue 中,我们常常使用 Axios 发起网络请求。而为了保证数据的安全性和用户的登录状态,我们需要进行拦截、跳转和 Token 验证。下面是具体的实现步骤。 实现步骤 1. 安装依赖 首先,需要在项目中安装两个依赖:axios 和 vue-router。…

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