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实现byte[]转List的示例代码

    实现byte[]转List可以使用Java内置的List和Arrays两个类来实现,以下是示例代码和详细攻略: 示例代码: import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ByteToListExample { public st…

    Java 2023年5月26日
    00
  • Java自定义线程池的实现示例

    下面是“Java自定义线程池的实现示例”的完整攻略。 Java自定义线程池的实现示例 简介 线程池是一种重要的多线程编程方式,它可以提高程序的效率和稳定性。Java的线程池由JDK自带的ThreadPoolExecutor实现,但我们也可以使用自定义的方式实现线程池,以满足特定需求。 实现步骤 定义线程池类 首先,我们需要定义线程池类,并继承自Java的Th…

    Java 2023年5月19日
    00
  • 详解JWT token心得与使用实例

    以下是详解JWT token心得与使用实例的完整攻略。 什么是JWT JWT(JSON Web Token)是一种开放标准,定义了用于在网络应用程序间传递声明的一个紧凑、自包含的方式。JWT 这个标准定义了一种简洁且安全的方式,可以在各方之间传输包含各种信息的 JSON 对象。JWT 主要用于身份验证和授权。 JWT 的组成结构 一个 JWT token 由…

    Java 2023年5月20日
    00
  • Spring Boot应用的极速部署脚本示例代码

    我很乐意为你详细讲解“Spring Boot应用的极速部署脚本示例代码”的完整攻略。 准备工作 在开始讲解之前,我们需要先进行一些准备工作: 安装JDK,确保环境变量已经配置完成。 安装Maven,确保环境变量已经配置完成。 极速部署脚本示例代码 接下来,我们将演示如何使用shell脚本自动化打包部署Spring Boot应用。这里提供两个示例: 示例一 假…

    Java 2023年5月19日
    00
  • Java中打乱一个数组的2种公平算法分享

    下面是“Java中打乱一个数组的2种公平算法分享”的完整攻略。 一、算法1:Fisher–Yates算法 1.算法原理 Fisher-Yates算法,又叫Knuth Shuffle算法,使用的是下标随机交换的方法,每次迭代时随机一个在当前位置及以后的位置(包括当前位置)之间的任意一个索引,然后将当前位置与该索引处的元素进行交换。该算法类似于每次从未处理的数据…

    Java 2023年5月19日
    00
  • Java实现的简单数字时钟功能示例

    Java实现的简单数字时钟功能示例,主要涉及到如何使用Java的Date类和SimpleDateFormat类来获取当前时间并在命令行输出数字时钟的界面。下面是一个详细的攻略步骤: 步骤一:创建Java项目 首先需要通过Java开发环境创建一个新的项目,建议使用Eclipse或IntelliJ IDEA等集成开发环境来进行开发。 步骤二:导入Date类和Si…

    Java 2023年5月18日
    00
  • Java集合源码全面分析

    Java集合源码全面分析是一部分Java开发者必备的技能。这个攻略将为您提供一些提示,如何最有效地学习和理解Java集合的源代码。 1. 学习Java集合的类层次结构 Java集合框架包含多个类和接口,这些类和接口组成了一个复杂的层次结构。您应该首先了解这个层次结构,确定每个类的位置以及它们如何相互调用。可以通过查找Java集合的类图或在线资料来帮助您。 2…

    Java 2023年5月26日
    00
  • throw的一些用法

    当在程序中遇到错误或异常情况时,我们可以使用 throw 语句来抛出异常。 throw 语句由 throw 关键字和要抛出的值组成,其基本语法如下: throw expression; expression 可以是任意表达式,其返回值将作为异常信息输出。 下面我们来详细讲解 throw 的一些用法: 1. 抛出预定义异常 在 C++ 中,标准库定义了一些常见…

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