Apache POI操作批量导入MySQL数据库

yizhihongxing

Apache POI操作批量导入MySQL数据库

本教程将详细介绍如何使用Apache POI库来操作Excel文件,将Excel数据批量导入MySQL数据库中。通过本教程,您将学到以下内容:

  • 导入Apache POI库
  • 使用Apache POI读取Excel文件中的数据
  • 连接MySQL数据库并进行数据插入

导入Apache POI库

首先,需要在项目中添加Apache POI库的依赖。可以通过以下方式完成:

  1. 在Maven项目中,在pom.xml文件中添加以下依赖:
<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>
  1. 在非Maven项目中,将下载的Apache POI库(poi-x.x.x.jarpoi-ooxml-x.x.x.jar)放置在项目的classpath下。

使用Apache POI读取Excel文件中的数据

读取Excel文件数据的过程分为以下几步:

  1. 创建FileInputStream对象,将Excel文件以流的形式加载到内存中。
  2. 创建Workbook对象,根据读取的Excel文件的格式(xls或xlsx)创建对应的HSSFWorkbookXSSFWorkbook对象。
  3. 获取Sheet对象,表示Excel文件中的一个工作表。
  4. 遍历Sheet对象中的每一行数据。
  5. 遍历每一行中的每一个单元格,获取单元格中存储的数据。

下面是示例代码:

import java.io.FileInputStream;
import java.io.IOException;
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 ExcelReader {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("data.xlsx"); // 加载Excel文件到流中
        Workbook wb = new XSSFWorkbook(fis); // 创建XSSFWorkbook对象
        Sheet sheet = wb.getSheetAt(0); // 获取第一个工作表

        // 遍历每一行数据
        for(Row row : sheet) {
            // 遍历每一个单元格
            for(Cell cell : row) {
                // 获取单元格中的数据并进行处理
                switch(cell.getCellTypeEnum()) {
                    case BOOLEAN:
                        System.out.print(cell.getBooleanCellValue() + "\t");
                        break;
                    case NUMERIC:
                        System.out.print(cell.getNumericCellValue() + "\t");
                        break;
                    case STRING:
                        System.out.print(cell.getStringCellValue() + "\t");
                        break;
                    case FORMULA:
                        System.out.print(cell.getCellFormula() + "\t");
                        break;
                    default:
                        System.out.println();
                }
            }
            System.out.println();
        }

        wb.close(); // 清理资源
        fis.close();
    }
}

连接MySQL数据库并进行数据插入

接下来,需要使用JDBC连接MySQL数据库,并将读取到的Excel数据插入到MySQL数据库的对应表中。下面是示例代码:

import java.io.FileInputStream;
import java.io.IOException;
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 ExcelReader {
    public static void main(String[] args) throws IOException, SQLException {
        FileInputStream fis = new FileInputStream("data.xlsx"); // 加载Excel文件到流中
        Workbook wb = new XSSFWorkbook(fis); // 创建XSSFWorkbook对象
        Sheet sheet = wb.getSheetAt(0); // 获取第一个工作表

        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "password123";
        Connection conn = DriverManager.getConnection(url, user, password); // 建立MySQL数据库连接

        String insertSql = "INSERT INTO student(id, name, age, gender) VALUES(?, ?, ?, ?)";
        PreparedStatement stmt = conn.prepareStatement(insertSql); // 创建PreparedStatement对象

        // 遍历每一行数据
        for(Row row : sheet) {
            // 获取每一行中的每一个单元格中的数据
            int id = (int) row.getCell(0).getNumericCellValue();
            String name = row.getCell(1).getStringCellValue();
            int age = (int) row.getCell(2).getNumericCellValue();
            String gender = row.getCell(3).getStringCellValue();

            // 设置PreparedStatement对象的参数
            stmt.setInt(1, id);
            stmt.setString(2, name);
            stmt.setInt(3, age);
            stmt.setString(4, gender);

            // 执行插入操作
            stmt.executeUpdate();
        }

        wb.close(); // 清理资源
        fis.close();
        stmt.close();
        conn.close();
    }
}

以上就是使用Apache POI操作批量导入MySQL数据库的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache POI操作批量导入MySQL数据库 - Python技术站

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

相关文章

  • mysql之跨库关联查询(dblink)问题

    针对“mysql之跨库关联查询(dblink)问题”,我提供如下的完整攻略: 1. 什么是跨库关联查询? 在实际的开发中,可能会存在多个数据库之间需要进行关联查询,例如从一个数据库中的表中获取某些信息,再通过另一个数据库中的表将这些信息与其他表的信息进行关联,此时就需要进行跨库关联查询。 跨库关联查询基本的原理是在SQL语句中使用多部分标识符,从而能够在不同…

    database 2023年5月22日
    00
  • Java实现Redis的集合(set)命令操作

    下面是关于Java实现Redis的集合(set)命令操作的完整攻略: 1. 环境准备 安装Redis数据库,在本地启动Redis服务 在Java项目中引入jedis依赖 2. 初始化Jedis连接 首先需要初始化Jedis连接,通过以下代码创建一个Jedis连接对象: Jedis jedis = new Jedis("localhost"…

    database 2023年5月22日
    00
  • plsql连接oracle数据库报ora 12154错误解决方法

    PL/SQL连接Oracle数据库报ORA-12154错误的解决方法 问题描述 在使用Oracle PL/SQL Developer连接Oracle数据库时,可能会出现ORA-12154错误: ORA-12154: TNS:could not resolve the connect identifier specified 这个错误表示PL/SQL Deve…

    database 2023年5月19日
    00
  • Win7系统日志提示在没有配置的 DNS 服务器响应之后,名称“域名”的名称解析超时的解放方法

    Win7系统日志提示在没有配置的 DNS 服务器响应之后,名称“域名”的名称解析超时表示在解析域名时,服务器没有及时响应,造成了解析超时。这种情况可能导致网络连接出现问题,影响网络使用。以下是解决的攻略: 1. 检查DNS设置 首先,需要检查计算机的DNS设置是否正确,DNS设置错误也会导致域名解析超时。打开“开始菜单”->”控制面板”->”网络…

    database 2023年5月21日
    00
  • 查看修改mysql编码方式让它支持中文(gbk或者utf8)

    要将MySQL编码方式修改为支持中文,需要开发人员做如下操作: 1. 确定当前MySQL服务器默认编码方式 首先需要确定当前MySQL服务器默认编码方式,可以输入以下命令查看: mysql> SHOW VARIABLES LIKE ‘character_set_%’; 执行上述命令后可以看到一系列的字符编码,其中比较重要的有: character_se…

    database 2023年5月22日
    00
  • 精炼mysql的数据,并且存放到redis中。

    # -*- coding:utf8 -*- ”’ Created on 2016年11月29日 @author: qiancheng ”’ import MySQLdb from email.mime.text import MIMEText from email.header import Header import smtplib import re…

    Redis 2023年4月11日
    00
  • DBMS中2NF和3NF的区别

    当我们设计一个关系型数据库的时候,需要将数据进行归一化,以避免数据的冗余和不一致性。常见的归一化形式包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。这里,我将详细讲解DBMS中2NF和3NF的区别以及实例说明。 1. 什么是2NF和3NF? 2NF和3NF都是关系型数据库设计中的一种范式。具体来说,2NF和3NF通常是针对关系中的属性之间的…

    database 2023年3月27日
    00
  • Python redis 订阅和发布

    发布和订阅   首先定义一个RedisHelper类,连接Redis,定义频道为monitor,定义发布(publish)及订阅(subscribe)方法。 #!/usr/bin/env python #-*- coding:utf-8 -*- import redis class RedisHelper(object): def __init__(self…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部