Java excel数据导入mysql的实现示例详解

Java excel数据导入mysql的实现示例详解

背景

在项目中,我们常常需要将Excel表格中的数据导入到MySQL数据库中,这是一种常用的数据导入方式。本文将介绍如何使用Java将Excel中的数据导入到MySQL数据库中,并提供两个示例供大家参考。

第一步:导入Excel相关的依赖

本示例中,我们使用Apache POI来操作Excel文件。在Maven中添加以下依赖即可:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

第二步:创建Java类

我们先创建一个Java类,命名为ExcelToMysqlDemo。该类中包含一个方法readExcel,用于读取Excel文件中的数据并将其插入到MySQL数据库中。

package com.demo;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelToMysqlDemo {

    private static String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static String URL = "jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
    private static String USERNAME = "root";
    private static String PASSWORD = "root";

    public static void readExcel() {
        try {
            Class.forName(DRIVER);
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            String sql = "INSERT INTO student(name, age, sex) VALUES (?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);

            FileInputStream fis = new FileInputStream(new File("student.xlsx"));
            Workbook workbook = new XSSFWorkbook(fis);
            Sheet sheet = workbook.getSheetAt(0);

            int rowNum = sheet.getLastRowNum();

            for(int i = 1; i <= rowNum; i++) {
                Row row = sheet.getRow(i);
                String name = row.getCell(0).getStringCellValue();
                int age = (int) row.getCell(1).getNumericCellValue();
                String sex = row.getCell(2).getStringCellValue();

                pstmt.setString(1, name);
                pstmt.setInt(2, age);
                pstmt.setString(3, sex);

                pstmt.executeUpdate();
            }

            pstmt.close();
            conn.close();
            workbook.close();

            System.out.println("数据插入成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

该类中使用了MySQL的JDBC驱动来连接数据库,连接信息如下:

  • URL:jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
  • USERNAME:root
  • PASSWORD:root

其中,demo是数据库名称,我们需要根据实际情况进行修改。

第三步:执行程序

readExcel方法中,我们将student.xlsx文件中的数据读取出来并插入到MySQL数据库中。执行程序即可完成数据导入。具体执行方法如下:

public static void main(String[] args) {
    ExcelToMysqlDemo.readExcel();
}

执行结果如下:

数据插入成功!

示例一:导入一个excel表格

我们首先创建一个简单的Excel表格,用于存储学生信息。表格格式如下:

姓名 年龄 性别
张三 20
李四 21
王五 22

将该表格命名为student.xlsx,并将其放置在项目根目录下。

然后,我们在MySQL数据库中创建一个名为demo的数据库,并在该数据库中创建一个名为student的表格,用于存储学生信息。表格格式如下:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  `sex` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

将上述Java代码加入到项目中,并执行main方法即可完成数据导入。执行结果如下:

数据插入成功!

示例二:导入多个excel表格

如果我们需要导入多个Excel表格中的数据,该如何执行呢?我们可以将读取Excel数据和插入MySQL数据库的代码封装到一个方法中,然后使用一个循环遍历每个Excel表格,如下所示:

public static void readAllExcel() {
    try {
        Class.forName(DRIVER);
        Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        String sql = "INSERT INTO student(name, age, sex) VALUES (?, ?, ?)";
        PreparedStatement pstmt = conn.prepareStatement(sql);

        File folder = new File(".");
        File[] files = folder.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".xlsx");
            }
        });

        for(File file : files) {
            FileInputStream fis = new FileInputStream(file);
            Workbook workbook = new XSSFWorkbook(fis);
            Sheet sheet = workbook.getSheetAt(0);

            int rowNum = sheet.getLastRowNum();

            for(int i = 1; i <= rowNum; i++) {
                Row row = sheet.getRow(i);
                String name = row.getCell(0).getStringCellValue();
                int age = (int) row.getCell(1).getNumericCellValue();
                String sex = row.getCell(2).getStringCellValue();

                pstmt.setString(1, name);
                pstmt.setInt(2, age);
                pstmt.setString(3, sex);

                pstmt.executeUpdate();
            }

            workbook.close();
        }

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

        System.out.println("数据插入成功!");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

在该方法中,我们使用File类获取项目目录下所有的.xlsx文件,然后对每个文件执行数据导入操作。

执行该方法即可完成所有Excel表格的数据导入。

总结

本文讲解了使用Java将Excel表格数据导入MySQL数据库的实现示例,并提供了两个示例供大家参考。通过本文的阅读,相信大家已经了解了相关的操作及代码实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java excel数据导入mysql的实现示例详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 详解springMVC—三种控制器controller

    以下是关于“详解Spring MVC—三种控制器Controller”的完整攻略,其中包含两个示例。 1. 前言 Spring MVC是一种常用的Java Web开发框架,它提供了一种灵活的方式来开发Web应用程序。在Spring MVC中,控制器是处理HTTP请求的核心组件。本攻略将详细讲解Spring MVC的三种控制器。 2. 控制器 在Spring …

    Java 2023年5月16日
    00
  • IDEA项目使用SpringBoot+MyBatis-Plus的方法

    这里是详细的讲解“IDEA项目使用SpringBoot+MyBatis-Plus的方法”的完整攻略,包含了两条示例。 准备条件 为了完成本攻略,你需要事先准备以下条件: JDK 8及以上版本 IntelliJ IDEA 2020.3或以上版本 Maven 3.0及以上版本 SpringBoot 2.4.x版本 MyBatis-Plus 3.x版本 数据库(本…

    Java 2023年5月20日
    00
  • java利用oss实现下载功能

    下面是“java利用oss实现下载功能”的完整攻略。 1. 准备工作 首先,我们需要在阿里云OSS上创建一个存储空间(Bucket),并上传一些文件数据。然后,我们需要在本地安装阿里云Java SDK,用于连接OSS服务并实现下载操作。 2. Java代码实现 下面是Java代码实现示例: 2.1 引入依赖 在Maven项目中,我们需要在pom.xml中引入…

    Java 2023年5月19日
    00
  • Maven提示jdk版本不正确的问题

    下面是Maven提示jdk版本不正确的问题的解决攻略: 1. 查看Maven是否正确识别jdk 首先需要确认Maven是否正确识别了你的jdk版本,使用以下命令查看: mvn -version 在输出的信息中,需要查看“Java home”一行,确认路径是否为你安装的JDK路径。如果不是,可以通过以下两种方式解决: (1) 使用环境变量 在你的环境变量中添加…

    Java 2023年5月19日
    00
  • Tomcat 启动错误(8080端口被占用)处理方法

    这里是针对Tomcat启动错误(8080端口被占用)处理的完整攻略。请按以下步骤操作: 1. 查找占用8080端口的进程 打开终端或命令提示符,输入以下命令: Windows netstat -ano | findstr 8080 MacOS/Linux sudo lsof -i :8080 以上命令会列出占用8080端口的进程PID。例如: TCP 127…

    Java 2023年5月19日
    00
  • C# 实现阶乘 (递归,非递归) 实现代码

    下面是详细讲解“C# 实现阶乘 (递归,非递归) 实现代码”的完整攻略: 什么是阶乘 阶乘(Factorial)指的是从1到某个正整数n之间所有整数的乘积,通常用n的阶乘表示,例如:5的阶乘为5!,它的值为 1×2×3×4×5=120。 非递归方式实现阶乘 以计算5的阶乘为例,非递归方式的实现代码如下: int factorial = 1; for (int…

    Java 2023年5月31日
    00
  • Java中不常用但很好用的开发小技巧分享

    下面是 “Java中不常用但很好用的开发小技巧分享” 的完整攻略: 一、使用Lambda表达式简化代码 Lambda表达式是Java 8中引入的新特性,它可以将方法当做参数进行传递,从而简化代码。比如,在Java 8之前,如果我们要对一个集合进行排序,通常需要实现Comparator接口,然后实现compare方法。而在Java 8中,我们可以使用Lambd…

    Java 2023年5月23日
    00
  • 你可能从未使用过的11+个JavaScript特性(小结)

    下面是详细讲解“你可能从未使用过的11+个JavaScript特性(小结)”的攻略。 介绍 本文将讲解11+个在JavaScript中常被忽略的特性。包括可选链操作符、空合并运算符、BigInt、Promise.allSettled()、Array.flat()、Array.flatMap()、Object.fromEntries()、String.trim…

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