Java解析Excel文件并把数据存入数据库

关于如何用Java解析Excel文件并把数据存入数据库,下面提供一份完整的攻略供你参考。

准备工作

在开始操作之前,需要你先准备好以下工具和环境:

  • JDK:Java开发环境。你可以从Oracle官网上下载安装最新版的JDK。
  • MySQL:数据库系统。你可以根据需要安装在本地或者使用云服务商提供的MySQL服务。
  • Apache POI:用于操作Excel文件的Java类库。可以从官网上下载最新版的Apache POI。

解析Excel文件

首先需要用Apache POI将Excel文件读取到Java的内存中,然后逐行解析每个单元格中的数据。

下面是读取Excel文件并输出内容的示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
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 ExcelParser {
    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream(new File("data.xlsx"));
            Workbook workbook = new XSSFWorkbook(file);

            Sheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.cellIterator();

                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case Cell.CELL_TYPE_STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                    }
                }
                System.out.println("");
            }
            file.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个示例代码中,我们首先创建一个FileInputStream对象来读取Excel文件,并通过XSSFWorkbook将Excel文件转换成Java的内存对象。

然后,我们获取第一个Sheet并通过iteator来遍历每一行,再通过iterator遍历每个单元格。根据单元格的类型,我们输出不同的内容。

存储数据到数据库

解析Excel文件之后,我们需要把获取到的数据存储到数据库中。和读取Excel文件一样,我们也需要通过Java提供的JDBC工具连接到MySQL数据库,并把数据写入到表中。

下面是将Excel文件中的数据存储到MySQL数据库的示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Iterator;
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 ExcelToMySQL {
    public static void main(String[] args) {
        String jdbcURL = "jdbc:mysql://localhost:3306/test";
        String username = "root";
        String password = "";

        String excelFilePath = "data.xlsx";

        int batchSize = 20;

        Connection connection = null;

        try {
            long start = System.currentTimeMillis();

            FileInputStream inputStream = new FileInputStream(excelFilePath);

            Workbook workbook = new XSSFWorkbook(inputStream);

            Sheet firstSheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = firstSheet.iterator();

            connection = DriverManager.getConnection(jdbcURL, username, password);
            connection.setAutoCommit(false);

            String sql = "INSERT INTO users(name, email, password) VALUES (?, ?, ?)";
            PreparedStatement statement = connection.prepareStatement(sql);    

            int count = 0;

            rowIterator.next(); // skip the header row

            while (rowIterator.hasNext()) {
                Row nextRow = rowIterator.next();
                Iterator<Cell> cellIterator = nextRow.cellIterator();

                while (cellIterator.hasNext()) {
                    Cell nextCell = cellIterator.next();

                    int columnIndex = nextCell.getColumnIndex();

                    switch (columnIndex) {
                        case 0:
                            String name = nextCell.getStringCellValue();
                            statement.setString(1, name);
                            break;
                        case 1:
                            String email = nextCell.getStringCellValue();
                            statement.setString(2, email);
                            break;
                        case 2:
                            String password = nextCell.getStringCellValue();
                            statement.setString(3, password);
                            break;
                    }

                }

                statement.addBatch();

                if (count % batchSize == 0) {
                    statement.executeBatch();
                }

            }

            workbook.close();

            // execute the remaining queries
            statement.executeBatch();

            connection.commit();
            connection.close();

            long end = System.currentTimeMillis();
            System.out.printf("Import done in %d ms\n", (end - start));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个示例代码中,我们首先定义了连接MySQL数据库的URL、用户名和密码等信息。

然后,我们读入Excel文件,并利用JDBC工具连接到MySQL数据库。接着,我们遍历Excel文件中的每一行数据,并通过JDBC将其插入到MySQL数据库中。

值得注意的是,我们通过设置batchSize来优化性能,每20行数据提交一次。

至此,我们就将Java解析Excel文件并把数据存入数据库的全部过程详细讲解完毕。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java解析Excel文件并把数据存入数据库 - Python技术站

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

相关文章

  • Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐)

    Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐) JDK14 中引入了 Java Flight Recorder(JFR)和 Java Mission Control(JMC),它们是开发 Java 应用程序时可以使用的工具。JFR可以有效地收集运行时数据,而 JMC 使得分析和解决性能问题变得更加便捷。在这篇文章中,我们将探讨 JDK14…

    Java 2023年5月19日
    00
  • SpringBoot中利用AOP和拦截器实现自定义注解

    实现自定义注解可以在SpringBoot项目中起到很大的作用,可以简化代码量,提高代码可读性和可维护性。本攻略将会详细讲解SpringBoot中如何利用AOP和拦截器实现自定义注解。 一、AOP实现自定义注解 AOP是一种编程范式,它可以在程序运行期间动态地将代码切入到指定方法的前、后或中部,而不需要修改源代码,从而解耦业务代码与公共主题(例如日志、安全、事…

    Java 2023年5月19日
    00
  • 类似Object监视器方法的Condition接口(详解)

    下面我会详细讲解“类似Object监视器方法的Condition接口(详解)”的完整攻略。 Background 在Java中,有时我们需要等待一些特定条件的发生,才能继续执行接下来的操作。此时,我们可以使用Object的监视器方法,或者使用JDK1.5出现的Lock机制,但是它们都存在一些问题,比如在多线程环境下容易出现死锁等问题。为解决这些问题,Java…

    Java 2023年5月26日
    00
  • Android使用URLConnection提交请求的实现

    Android使用URLConnection提交请求的实现攻略 在Android应用程序中,我们有时需要通过网络连接与服务器进行通讯,数据的传输有很多方式,其中常用的就是HTTP协议,而提交HTTP请求的方式也很多,比如常见的有Apache HttpClient、OkHttp等等。本文主要介绍基于JDK提供的URLConnection提交HTTP请求的方案。…

    Java 2023年6月15日
    00
  • Java查询时间段(startTime–endTime)间的数据方式

    针对Java查询时间段(startTime–endTime)间的数据方式,我提供以下完整攻略。 1. 时间格式 首先需要明确Java程序所使用的时间格式,常见的有”yyyy-MM-dd HH:mm:ss”、”yyyyMMddHHmmss”等。假设我们的时间格式为”yyyy-MM-dd HH:mm:ss”。 2. SQL查询语句 接下来就是SQL查询语句,假…

    Java 2023年5月20日
    00
  • 使用Java 压缩文件打包tar.gz 包的详细教程

    使用Java压缩文件打包tar.gz包是一项非常重要的技能。下面是详细的攻略: 1. 确保环境准备就绪 在开始之前,我们需要确保环境准备就绪。首先,需要确保你已经安装了Java开发环境(JDK)。其次,需要下载和安装Apache Ant工具包。最后,需要确保Java编译器的bin文件夹被添加到环境变量中。 2. 建立Ant的build.xml文件 在进行Ja…

    Java 2023年5月19日
    00
  • 如何配置类路径?

    以下是关于如何配置类路径的完整使用攻略: 什么是类路径? Java程序在运行时需要加载类文件,而类文件的位置就是通过类路径来指定的。类路径可以包含多个路径,每个路径之间使用分隔符(如冒号或分号)分隔。类路径可以包含目录和JAR文件。 如何配置类路径? 下面介绍三种常见的配置类路径的方法。 方法一:使用命令行参数设置类路径 可以通过命令行参数设置类路径。例如,…

    Java 2023年5月12日
    00
  • java中使用zxing批量生成二维码立牌

    下面就详细讲解一下“java中使用zxing批量生成二维码立牌”的完整攻略。 简介 zxing是一个开源的、支持多种编程语言的二维码生成和识别库。我们可以借助zxing库,使用java语言批量生成带有文字的二维码立牌。 准备工作 下载zxing库:我们可以从zxing的官方网站或者Maven中央仓库中获取zxing库。 创建Java工程:我们可以选择使用Ec…

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