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日

相关文章

  • Java异常 Factory method’sqlSessionFactory’rew exception;ested exception is java.lang.NoSuchMethodError:

    题目中描述的异常信息 “Factory method ‘sqlSessionFactory’ threw exception; nested exception is java.lang.NoSuchMethodError:” 实际上提供了有用的提示信息,可以作为排除问题的起点。异常信息中的 “Factory method ‘sqlSessionFactor…

    Java 2023年5月27日
    00
  • springboot 使用 minio的示例代码

    下面是详细的攻略过程。 使用 Minio 存储文件 Minio是一个分布式对象存储服务,除了能提供文件存储、数据备份和归档之外,还能快速实现容量扩展。 使用 Minio 前需要先创建一个存储桶。 val minioEndpoint: String val minioAccessKey: String val minioSecretKey: String va…

    Java 2023年5月20日
    00
  • Java日常练习题,每天进步一点点(60)

    首先,这是一篇Java日常练习题的攻略,包含了60个练习题目,帮助学习Java的人每天进步一点点。本文分为如下部分: 攻略简介 练习题目列表 示例说明 攻略简介 这篇攻略共包含了60个Java练习题目,力求帮助Java学习者过好编程的每一天。每个练习题目的描述都很清晰明了,题目中包含了需要完成的任务,做完题目后会有详细的答案和代码解释。通过这些练习题目的完成…

    Java 2023年5月23日
    00
  • Java获取当前时间年月日的方法

    获取当前时间年月日是Java中比较常见的操作,下面将介绍几种获取当前时间年月日的方法。 方法一 使用java.util.Date类获取当前时间,然后通过SimpleDateFormat类格式化输出年月日。 import java.text.SimpleDateFormat; import java.util.Date; public class GetCur…

    Java 2023年5月20日
    00
  • Angularjs实现多图片上传预览功能

    下面是关于AngularJS实现多图片上传预览功能的详细攻略: 1. 环境准备 在开始实现多图片上传预览功能前,需要确保以下环境已准备好: AngularJS框架; HTML和CSS基本知识; 文件上传插件jQuery File Upload; 一些基本的javascript和jQuery知识。 2. 实现步骤 第1步:引入jQuery和AngularJS框…

    Java 2023年6月15日
    00
  • JAVA对称加密算法PBE定义与用法实例分析

    JAVA对称加密算法PBE定义与用法实例分析 简介 PBE(Password Based Encryption)是基于密码的加密算法,在数据加密中使用口令替代了传统的密钥,是一种轻量级加密算法。PBE算法不需要证书链和公钥证书等机构,实现简单便捷,容易实施。PBE算法又称为基于口令加密。 PBE算法加密实现步骤 1.搜集用户输入 从用户输入中获取需要加密的数…

    Java 2023年5月19日
    00
  • SpringBoot多环境配置教程详解

    SpringBoot多环境配置教程详解 在开发SpringBoot项目时,我们通常需要针对不同的环境进行配置,例如开发环境、测试环境、生产环境等等。本文将详细讲解如何在SpringBoot项目中实现多环境配置。 方法一:使用多个properties/yml文件 我们可以在SpringBoot项目中使用多个properties/yml文件,分别存放不同环境的配…

    Java 2023年5月31日
    00
  • 在CentOS系统中检测Java安装及运行jar应用的方法

    在CentOS系统中检测Java安装及运行jar应用的方法: 1. 检测Java是否安装 可以通过以下命令检查Java是否安装在系统中: java -version 如果Java已经安装在系统中,会输出类似以下内容的信息: java version "1.8.0_191" Java(TM) SE Runtime Environment (…

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