Java如何将Excel数据导入到数据库

下面我将为你详细解释如何使用Java将Excel数据导入到数据库。整个过程可以分为以下几个步骤:

  1. 导入相关依赖库

要想使用Java将Excel数据导入到数据库,我们需要使用Apache的POI库来读取和解析Excel文件,以及使用数据库的JDBC驱动。因此需要在项目中导入以下两个依赖库:

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

<dependency>
    <groupId>com.mysql.jdbc</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.24</version>
</dependency>
  1. 创建连接数据库的类和方法

Java中通常使用JDBC驱动来连接数据库。因此我们需要定义一个连接数据库的类,并在类中定义一个方法,用于建立连接。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/testdb";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            System.out.println("数据库连接成功");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驱动程序类,加载驱动失败!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("数据库连接失败!");
            e.printStackTrace();
        }
        return conn;
    }
}

可以看到 getConnection() 方法通过 DriverManager 来建立和连接数据库,需要传入 JDBC URL,以及登录数据库使用的用户名和密码。

  1. 解析Excel文件

我们需要使用POI库中的API来读取和解析Excel文件。具体代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
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.xssf.usermodel.XSSFWorkbook;

public class ExcelReader {
    public static void main(String[] args) throws IOException {
        String excelFilePath = "C:/TEMP/book.xlsx";
        FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = sheet.iterator();
        while (iterator.hasNext()) {
            Row nextRow = iterator.next();
            Iterator<Cell> cellIterator = nextRow.cellIterator();
            List<String> rowValues = new ArrayList<>();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                switch (cell.getCellType()) {
                    case STRING:
                        rowValues.add(cell.getStringCellValue().trim());
                        break;
                    case NUMERIC:
                        rowValues.add(String.valueOf(cell.getNumericCellValue()).trim());
                        break;
                    default:
                        rowValues.add("");
                        break;
                }
            }
            System.out.println(rowValues);
        }
        workbook.close();
        inputStream.close();
    }
}

这段代码使用了FileInputStream类读取 Excel 文件进行解析,并将解析好的结果存储在一个 List 中。

  1. 将数据插入到数据库中

现在我们已经成功地读取并解析了 Excel 文件了,接下来是将数据插入到数据库中的步骤。下面展示一段将Excel数据插入MySQL的示例代码。

public class ExcelReader {
    public static void main(String[] args) throws IOException {
        String excelFilePath = "C:/TEMP/book.xlsx";
        FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = sheet.iterator();
        while (iterator.hasNext()) {
            Row nextRow = iterator.next();
            Iterator<Cell> cellIterator = nextRow.cellIterator();
            List<String> rowValues = new ArrayList<>();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                switch (cell.getCellType()) {
                    case STRING:
                        rowValues.add(cell.getStringCellValue().trim());
                        break;
                    case NUMERIC:
                        rowValues.add(String.valueOf(cell.getNumericCellValue()).trim());
                        break;
                    default:
                        rowValues.add("");
                        break;
                }
            }
            System.out.println(rowValues);

            String sql = "INSERT INTO employee (id,name,age,address,salary) " 
                    + "VALUES ('" + rowValues.get(0) + "','" + rowValues.get(1) + "','" + rowValues.get(2) + "','" + rowValues.get(3) + "','" + rowValues.get(4) + "')";

            Connection conn = DBConnection.getConnection();
            Statement statement = null;

            try {
                statement = conn.createStatement();
                statement.executeUpdate(sql);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (statement != null) {
                        statement.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        workbook.close();
        inputStream.close();
    }
}

可以看到,我们再次使用迭代器来遍历 Excel 的数据,并在循环内部构建插入 SQL 语句。最后,使用 JDBC 的 Statement 对象来将数据插入到数据库中。

这里仅提供了一种将 Excel 数据导入到数据库的示例代码,实际上很多细节需要你自己去处理,如数据类型转换、数据校验、异常处理等等。希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何将Excel数据导入到数据库 - Python技术站

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

相关文章

  • 使用异步controller与jQuery实现卷帘式分页

    下面我来详细讲解如何使用异步controller与jQuery实现卷帘式分页的完整攻略。 什么是卷帘式分页? 卷帘式分页是一种网页分页的效果。就是当我们向下滑动网页的时候,在页面底部会自动加载新的内容,实现不间断的加载效果,类似于卷帘拉开的效果。这种效果可以让用户更加流畅地查看网页内容,提高用户体验。 使用异步controller实现卷帘式分页 异步cont…

    Java 2023年5月19日
    00
  • 如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )

    清理系统临时文件可以释放系统磁盘空间,提高系统性能,以下是不同编程语言的批量清理系统临时文件攻略以及示例代码。 C#: 获取临时文件路径 string tempPath = Path.GetTempPath(); 清空临时文件夹 DirectoryInfo tempDirectory = new DirectoryInfo(tempPath); foreac…

    Java 2023年5月19日
    00
  • Java 动态数组的实现示例

    下面是 Java 动态数组的实现示例的完整攻略: 动态数组的定义 动态数组是指在数组长度不够时可以动态扩容的数组。在 Java 中,动态数组又被称作 ArrayList。 动态数组的实现方式 Java 中的动态数组可以通过 ArrayList 类来实现。ArrayList 中本身就包含了自动扩容的功能,可以根据需要动态增大数组的长度。 ArrayList 例…

    Java 2023年5月26日
    00
  • 详解Spring框架—IOC装配Bean

    来看看详解Spring框架—IOC装配Bean的完整攻略吧! 1. 什么是IOC IOC是Inversion Of Control的缩写,中文翻译为控制反转。简单来说,控制权不再由调用者来决定,而是由容器来决定。在Spring框架中,可以通过IOC实现Bean的装配。 2. Bean的定义 在Spring中,Bean即为Spring容器中管理的对象。Be…

    Java 2023年5月19日
    00
  • Java编程学习的几个典型实例详解

    Java编程学习的几个典型实例详解 如果你正在学习Java编程,建立几个典型的实例并深入研究它们是帮助你更好理解Java的重要步骤之一。 下面是一些你可以跟随的Java编程实例: 实例一:图书馆管理系统 图书馆管理系统是您可以实现的最典型的Java编程实例之一。在这个系统中,您需要设计一个完整的图书馆信息管理系统,包括添加、删除、修改图书馆书本的信息,检索书…

    Java 2023年5月19日
    00
  • 浅析JDK和Tomcat的安装与配置方法

    浅析JDK和Tomcat的安装与配置方法 1. JDK的安装与配置 1.1 下载JDK JDK是Java Development Kit的简称,是Java开发所必须的环境。在安装JDK之前,需要先官网上下载JDK安装包。 示例1: 下载JDK 8.0 for Windows x64安装包 1.2 安装JDK 安装JDK的过程与一般软件的安装过程类似,运行安装…

    Java 2023年5月19日
    00
  • Java获取当前时间戳案例详解

    标题 Java获取当前时间戳案例详解 介绍 本文主要讲解如何使用Java获取当前时间戳的方法,并提供两个示例。时间戳是一种计算机时间的表示方法,它表示从1970年1月1日0点0分0秒(UTC,即格林威治标准时间)到现在所经过的秒数。 获取当前时间戳的方法 Java中获取当前时间戳的方法有两种: 1.使用Java标准库提供的System.currentTime…

    Java 2023年5月20日
    00
  • Mabatis错误提示Parameter index out of range的处理方法

    MyBatis错误提示Parameter index out of range的处理方法 MyBatis是一个流行的ORM框架,但在使用过程中,我们有时会遇到“Parameter index out of range”的异常错误,这篇文章将详细讲解出现此类错误的原因和应对方法。 问题背景 在MyBatis中,我们可以使用#{}或者${}占位符来动态设置SQL…

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