Java将excel中的数据导入到mysql中

下面我将详细讲解“Java将excel中的数据导入到mysql中”的完整攻略。本攻略总体流程分为三步:读取Excel数据、连接MySQL数据库、将数据导入到数据库中。具体过程如下:

1. 读取Excel数据

首先需要使用Java中的一些类库来读取Excel表格数据。在这里我们使用Apache POI类库,它能够帮助我们读取和操作Excel表格文件。

代码示例1:

File file = new File("test.xlsx");
Workbook workbook = null;
try{
    //创建工作簿对象
    workbook = WorkbookFactory.create(file);
    //获取sheet数目
    int sheets = workbook.getNumberOfSheets();
    //循环遍历每个sheet
    for(int i = 0; i < sheets; i++){
        Sheet sheet = workbook.getSheetAt(i);
        //获取行数
        int rows = sheet.getPhysicalNumberOfRows();
        //循环遍历每一行
        for(int j = 0; j < rows; j++){
            Row row = sheet.getRow(j);
            //获取列数
            int cells = row.getPhysicalNumberOfCells();
            //循环遍历每一列
            for(int k = 0; k < cells; k++){
                Cell cell = row.getCell(k);
                //获取单元格中的数据
                String value = cell.getStringCellValue();
                System.out.println(value);
            }
            System.out.println();
        }
    }
}catch(Exception e){
    e.printStackTrace();
}

这段代码中,我们首先创建了一个File对象来表示Excel表格文件。然后使用WorkbookFactory类的create方法来创建一个工作簿对象。通过getNumberOfSheets方法获取表格包含的sheet数目,然后循环遍历每个sheet,通过getPhysicalNumberOfRows方法获取每个sheet包含的行数。再通过循环遍历每一行,使用getPhysicalNumberOfCells方法获取每一行包含的列数。最后使用getCell方法获取每个单元格对象,使用getStringCellValue方法获取单元格中的数据。

代码示例2:

File file = new File("test.xlsx");
Workbook workbook = null;
try{
    //创建工作簿对象
    workbook = WorkbookFactory.create(file);
    //获取第一个sheet
    Sheet sheet = workbook.getSheetAt(0);
    //获取表头所在行
    Row titleRow = sheet.getRow(0);
    //获取列数
    int cells = titleRow.getPhysicalNumberOfCells();
    //创建一个数组用来保存表头
    String[] titles = new String[cells];
    //循环遍历表头
    for(int i = 0; i < cells; i++){
        Cell cell = titleRow.getCell(i);
        titles[i] = cell.getStringCellValue();
    }
    //获取数据行数
    int rows = sheet.getPhysicalNumberOfRows();
    //循环遍历每个数据行
    for(int i = 1; i < rows; i++){
        Row row = sheet.getRow(i);
        //创建一个Map用来保存每行数据
        Map<String, Object> rowData = new HashMap<>();
        //循环遍历每一列
        for(int j = 0; j < cells; j++){
            Cell cell = row.getCell(j);
            //获取单元格中的数据
            Object value = null;
            switch(cell.getCellType()){
                case NUMERIC:
                    value = cell.getNumericCellValue();
                    break;
                case STRING:
                    value = cell.getStringCellValue();
                    break;
                case BOOLEAN:
                    value = cell.getBooleanCellValue();
                    break;
                case FORMULA:
                    value = cell.getCellFormula();
                    break;
                default:
                    value = null;
            }
            rowData.put(titles[j], value);
        }
        System.out.println(rowData.toString());
    }
}catch(Exception e){
    e.printStackTrace();
}

这段代码与前面不同的地方在于,这里我们假设Excel表格的第一行是表头,第二行及以后是数据。首先获取第一个sheet对象,然后获取表头所在的行,使用getPhysicalNumberOfCells方法获取表头包含的列数,循环遍历表头,使用getCell方法获取单元格对象,使用getStringCellValue方法获取单元格中的数据。然后通过getPhysicalNumberOfRows方法获取数据行数,循环遍历每个数据行,使用一个Map对象来保存每行数据,循环遍历每一列,使用getCellType方法判断单元格中的数据类型,然后使用不同的方法获取单元格中的数据,最后使用表头作为key,将每个单元格的数据保存到Map中。

2. 连接MySQL数据库

连接MySQL数据库需要先加载MySQL驱动,然后使用JDBC API来连接数据库。在这里我们使用了com.mysql.jdbc.Driver驱动。

代码示例:

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

public class MySqlConnection {
    private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    private static Connection connection = null;

    public static Connection getConnection() {
        if (connection == null) {
            synchronized (MySqlConnection.class) {
                if (connection == null) {
                    try {
                        Class.forName("com.mysql.jdbc.Driver");
                        connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                    } catch (ClassNotFoundException | SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return connection;
    }
}

在这里,我们首先定义了MySQL的连接信息,包括URL、用户名和密码。然后使用静态方法getConnection来获取数据库连接对象,这个方法使用了双检锁来确保线程安全。在方法中,我们首先加载MySQL驱动,然后使用DriverManager类的getConnection方法来获取数据库连接对象。

3. 将数据导入到数据库中

使用JDBC API将数据插入到数据库表中。在这里我们假设导入数据的表格中包含三列,分别是idnamescore

代码示例:

public class ExcelToMysql {
    public static void main(String[] args) {
        File file = new File("test.xlsx");
        Workbook workbook = null;
        try{
            //创建工作簿对象
            workbook = WorkbookFactory.create(file);
            //获取第一个sheet
            Sheet sheet = workbook.getSheetAt(0);
            //获取数据行数
            int rows = sheet.getPhysicalNumberOfRows();
            //获取数据库连接对象
            Connection connection = MySqlConnection.getConnection();
            //创建SQL语句
            String sql = "INSERT INTO student (id, name, score) VALUES (?, ?, ?)";
            //创建预编译语句对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //循环遍历每个数据行
            for(int i = 1; i < rows; i++){
                Row row = sheet.getRow(i);
                //获取每列的数据
                int id = (int) row.getCell(0).getNumericCellValue();
                String name = row.getCell(1).getStringCellValue();
                double score = row.getCell(2).getNumericCellValue();
                //设置预编译语句参数
                preparedStatement.setInt(1, id);
                preparedStatement.setString(2, name);
                preparedStatement.setDouble(3, score);
                //执行SQL语句
                preparedStatement.executeUpdate();
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //关闭工作簿对象
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //关闭数据库连接对象
            try {
                MySqlConnection.getConnection().close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

这段代码中,我们首先获取第一个sheet对象,然后使用getPhysicalNumberOfRows方法获取数据行数,然后获取MySQL数据库的连接对象。接着创建SQL语句和预编译语句对象,循环遍历每个数据行,使用getCell方法获取每列的数据,使用setXXX方法设置预编译语句的参数,然后使用executeUpdate方法执行SQL语句。最后关闭工作簿对象和数据库连接对象。

以上就是Java将Excel中的数据导入到MySQL中的完整攻略和示例代码,希望对你有所帮助。

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

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Java中单例模式的七种写法示例

    Java中单例模式的七种写法示例 什么是单例模式? 单例模式是一种创建型设计模式,它保证某个类在应用程序中只有一个对象实例存在。 在应用程序中,有些实例对象需要全局唯一,比如数据库连接实例、日志记录实例等,此时就可以使用单例模式来确保只创建一个对象实例,以达到节约系统资源的目的。 单例模式的七种实现方式 1. 饿汉式单例模式 public class Sin…

    Java 2023年5月26日
    00
  • B/S结构系统的会话机制(session)

    B/S结构系统的会话机制(session) 目录 B/S结构系统的会话机制(session) 每博一文案 1. session 会话机制的概述 2. 什么是 session 的会话 3. session 的作用 4. session 的实现原理解释 5. 补充: Cookie禁用了,session还能找到吗 ? 6. 总结一下到目前位置我们所了解的域对象: …

    Java 2023年4月30日
    00
  • Java Apache Commons报错“NullPointerException”的原因与解决方法

    “NullPointerException”是Java中最常见的异常之一,通常由以下原因之一引起: 对象为空:如果对象为空,则可能会出现此错误。在这种情况下,需要检查对象以解决此问题。 未初始化的变量:如果变量未初始化,则可能会出现此错误。在这种情况下,需要初始化变量以解决此问题。 以下是两个实例: 例1 如果对象为空,则可以尝试检查对象以解决此问题。例如,…

    Java 2023年5月5日
    00
  • Java编程中更新XML文档的常用方法

    当需要更新XML文档时,Java编程中有多种常用的方法。本文将介绍Java编程中经常使用的两种方法。 方法一:使用DOM编程 DOM(文档对象模型)是一种Java内置的XML解析器。通常,使用DOM解析XML文档时,会将整个XML文件加载到内存中,构建一个XML的DOM树,程序员可以通过修改DOM树的方式来实现对XML文件的更新操作。 示例一:添加一个节点 …

    Java 2023年6月15日
    00
  • Java(springboot) 读取txt文本内容代码实例

    下面是关于”Java(springboot) 读取txt文本内容代码实例”的完整攻略: 1. 准备工作 在开始实际操作之前,请确保你已经按照以下步骤准备就绪: 已安装好springboot 已经找到要读取的txt文件,并将其放置于项目的资源文件夹中 2. 代码实现 2.1. 读取文件内容到String import org.springframework.c…

    Java 2023年5月19日
    00
  • spring boot RestTemplate 发送get请求的踩坑及解决

    关于“spring boot RestTemplate 发送get请求的踩坑及解决”的完整攻略,我将分为以下几个部分逐一进行讲解: 介绍RestTemplate发送get请求的基本用法 分析在发送get请求时可能遇到的踩坑 解决get请求中可能遇到的问题 最后,提供至少两个示例说明。 1. RestTemplate发送get请求的基本用法 RestTempl…

    Java 2023年5月26日
    00
  • 简述Mybatis增删改查实例代码

    下面是详细讲解“简述Mybatis增删改查实例代码”的完整攻略。 1. 简介 Mybatis是一款优秀的持久层框架,它对JDBC的操作进行了封装,使我们能够更加高效地进行数据库操作,同时也提高了代码的可读性和可维护性。在这里,我们将介绍如何使用Mybatis进行增删改查操作。 2. 环境 为了执行Mybatis示例,我们需要安装以下软件: Java JDK …

    Java 2023年5月19日
    00
  • Springboot maven plugin插件原理及作用

    SpringBoot Maven Plugin是一个Maven插件,它提供了各种功能来帮助我们创建和打包SpringBoot应用程序。 插件的作用 SpringBoot Maven Plugin可以帮助我们完成以下任务: 打包spring boot应用程序; 运行spring boot应用程序; 生成Spring Boot应用程序的运行脚本; 单元测试; 生…

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