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 Apache Commons报错“NoSuchElementException”的原因与解决方法

    “NoSuchElementException”是Java的一个异常,通常由以下原因之一引起: 无效的迭代器:如果迭代器无效,则可能会出现此错误。在这种情况下,需要检查迭代器以解决此问题。 空列表:如果列表为空,则可能会出现此错误。在这种情况下,需要检查列表以解决此问题。 以下是两个实例: 例1 如果迭代器无效,则可以尝试检查迭代器以解决此问题。例如,在Ja…

    Java 2023年5月5日
    00
  • Struts2学习笔记(5)-参数传递方法

    下面给出Struts2学习笔记(5)-参数传递方法的完整攻略。 1. 参数传递方法 Struts2框架提供了多种参数传递方法,包括: 基于动态属性的参数传递方法 基于XLST的参数传递方法 基于注解的参数传递方法 基于拦截器的参数传递方法 1.1 基于动态属性的参数传递方法 在Struts2中,可以通过设置动态属性来进行参数传递。需要为Action类的变量提…

    Java 2023年5月20日
    00
  • 详解Ubuntu下安装和配置Apache2

    下面是详解Ubuntu下安装和配置Apache2的完整攻略步骤: 1. 安装Apache2 Ubuntu上安装Apache2十分简单,只需要在终端中运行以下命令即可: sudo apt-get update sudo apt-get install apache2 2. 启动Apache2服务 安装完成后,需要将Apache2服务启动才能访问。运行以下命令启…

    Java 2023年5月19日
    00
  • 一天吃透操作系统八股文

    操作系统的四个特性? 并发:同一段时间内多个程序执行(与并行区分,并行指的是同一时刻有多个事件,多处理器系统可以使程序并行执行) 共享:系统中的资源可以被内存中多个并发执行的进线程共同使用 虚拟:通过分时复用(如分时系统)以及空分复用(如虚拟内存)技术把一个物理实体虚拟为多个 异步:系统进程用一种走走停停的方式执行,(并不是一下子走完),进程什么时候以怎样的…

    Java 2023年4月17日
    00
  • Java中Socket用法详解

    Java中Socket用法详解 概述 Java中提供了Socket和ServerSocket这两个类用于网络通信,其中Socket是客户端用于构建TCP协议连接的类,而ServerSocket则是服务端用于监听和接受连接请求的类。 Socket 1. 创建Socket 可以通过如下方式创建Socket连接: Socket socket = new Socke…

    Java 2023年5月26日
    00
  • Java 对象深拷贝工具类的实现

    概述: Java 对象深拷贝是指将一个对象完全复制另一个对象,即所有属性和属性值都被复制,并且两个对象之间没有相互影响。在 Java 开发中经常会使用对象深拷贝,比如在进行对象传参、克隆等场合都需要进行对象深拷贝。本文将详细讲解 Java 对象深拷贝工具类的实现。 实现: Java 中提供了两种方式实现深拷贝:Serializable 和 Cloneable…

    Java 2023年5月26日
    00
  • SpringBoot居然有44种应用启动器,你都知道吗

    Spring Boot启动器详解 Spring Boot启动器是一组依赖项的集合,它们一起工作以提供特定功能。Spring Boot提供了许多启动器,可以帮助开发人员快速构建应用程序。在本文中,我们将详细讲解Spring Boot启动器的种类和使用方法。 Spring Boot启动器的种类 Spring Boot提供了许多启动器,可以帮助开发人员快速构建应用…

    Java 2023年5月15日
    00
  • Java实现屏幕截图工具的代码分享

    Java实现屏幕截图工具的代码分享 介绍 本文将介绍如何使用Java完成屏幕截图的功能。屏幕截图是一项非常有用的工具,可以用于在教育、演示和软件开发中捕获屏幕上的图像。我们将使用Java的Graphics2D类和Robot类来创建这个屏幕截图工具。 创建一个基本的屏幕截图应用程序 我们将从创建一个基本的屏幕截图应用程序开始。该应用程序将使用一个按钮来触发屏幕…

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