java实现批量导入Excel表格数据到数据库

下面是“Java实现批量导入Excel表格数据到数据库”的完整攻略:

1. 准备工作

在Java中实现批量导入Excel数据到数据库,需要先进行以下准备工作:

  • 导入相关依赖库
  • 配置数据库连接
  • 创建表格对应的实体类

1.1 导入相关依赖库

需要导入以下几个依赖库:

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>commons-dbutils</groupId>
        <artifactId>commons-dbutils</artifactId>
        <version>1.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
</dependencies>

1.2 配置数据库连接

在Java中连接数据库需要一个数据源,推荐使用Druid数据源,以下是数据源的配置:

import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
public class DataSourceUtils {
    public static DataSource getDataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/test");
        ds.setUsername("root");
        ds.setPassword("root");
        return ds;
    }
}

1.3 创建表格对应的实体类

根据表格结构,创建对应的实体类,示例代码如下:

public class User {
    private String id;
    private String name;
    private Integer age;
    // set、get方法省略
}

2. 实现导入Excel数据到数据库的主要代码

2.1 创建DAO工具类

此处采用Apache Commons DbUtils实现操作数据库,创建一个DAO工具类UserDAO:

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;
public class UserDAO {
    private DataSource dataSource;
    public UserDAO(DataSource dataSource) {
        this.dataSource = dataSource;
    }
    public void batchSave(List<User> users) throws SQLException {
        QueryRunner qr = new QueryRunner(dataSource);
        String sql = "INSERT INTO user(id, name, age) VALUES (?, ?, ?)";
        Object[][] params = new Object[users.size()][3];
        for (int i = 0; i < users.size(); i++) {
            User user = users.get(i);
            params[i][0] = user.getId();
            params[i][1] = user.getName();
            params[i][2] = user.getAge();
        }
        qr.batch(sql, params);
    }
    public List<User> findAll() throws SQLException {
        QueryRunner qr = new QueryRunner(dataSource);
        String sql = "SELECT * FROM user";
        return qr.query(sql, new BeanListHandler<>(User.class));
    }
}

2.2 实现Excel数据的读取和转换

创建ExcelReader工具类,实现对Excel数据的读取和转换,其中导入的Excel文件名为users.xlsx,包含三列数据:id、name、age。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ExcelReader {
    public static List<User> readUsersFromExcel() throws IOException {
        List<User> users = new ArrayList<>();
        try (FileInputStream fis = new FileInputStream(new File("users.xlsx"))) {
            Workbook workbook = new XSSFWorkbook(fis);
            Sheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                if (row.getRowNum() == 0) {
                    // 跳过第一行表头
                    continue;
                }
                User user = new User();
                user.setId(getStringCellValue(row.getCell(0)));
                user.setName(getStringCellValue(row.getCell(1)));
                user.setAge((int) row.getCell(2).getNumericCellValue());
                users.add(user);
            }
        }
        return users;
    }
    private static String getStringCellValue(Cell cell) {
        cell.setCellType(CellType.STRING);
        return cell.getStringCellValue().trim();
    }
}

2.3 实现批量导入Excel数据的入口方法

在程序入口处,调用以上DAO和ExcelReader工具类,实现批量导入Excel数据到数据库:

public class Main {
    public static void main(String[] args) throws Exception {
        DataSource dataSource = DataSourceUtils.getDataSource();
        UserDAO userDAO = new UserDAO(dataSource);
        List<User> users = ExcelReader.readUsersFromExcel();
        userDAO.batchSave(users);
        List<User> userList = userDAO.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

这段代码分别进行了三个操作:

  1. 读取Excel文件,获取用户信息列表。
  2. 调用UserDAO中的batchSave()方法进行批量插入操作。
  3. 查询全部数据,输出在控制台。

3. 示例

在示例中,假设Excel表格中有5个用户信息,通过以上代码批量导入到数据库中。

3.1 Excel文件内容

id name age
1 张三 22
2 李四 23
3 王五 24
4 小黑 21
5 小白 26

3.2 输出结果

输出结果如下:

User{id='1', name='张三', age=22}
User{id='2', name='李四', age=23}
User{id='3', name='王五', age=24}
User{id='4', name='小黑', age=21}
User{id='5', name='小白', age=26}

以上即是Java实现批量导入Excel表格数据到数据库的完整攻略,包含了基本的准备工作和关键代码实现,同时也包含了两个示例供参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现批量导入Excel表格数据到数据库 - Python技术站

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

相关文章

  • 使用java写的矩阵乘法实例(Strassen算法)

    使用Java编写矩阵乘法实例 算法介绍 Strassen算法是一种快速的矩阵乘法算法,该算法的时间复杂度为O(n^log7)。相比于传统的矩阵乘法算法,在矩阵规模非常大时,Strassen算法可以显著减少计算量,提高计算效率。因此,它经常被应用于科学计算、数据分析等领域。 Strassen算法核心思想 Strassen算法的核心思想是:将一个nn的矩阵A分解…

    Java 2023年5月19日
    00
  • jsp filter 过滤器功能与简单用法示例

    下面我将为你详细讲解“JSP Filter 过滤器功能与简单用法示例”的完整攻略。 1. JSP Filter 过滤器的概念 JSP Filter 是 JSP 技术中的一种过滤器,它可以以拦截器的方式截获请求,对请求进行过滤或者添加处理,再将请求交给被请求的资源处理,从而实现某些特定的功能和保障系统的安全性。 2. JSP Filter 过滤器的应用场景 J…

    Java 2023年6月15日
    00
  • Java实现的Windows资源管理器实例

    Java实现的Windows资源管理器实例攻略 简介 Windows资源管理器是微软操作系统中的一个重要工具,它提供了对文件和文件夹的管理、查看和操作功能。本文将讲解如何使用Java编写一个Windows资源管理器的实例程序,让使用者可以通过程序来管理和操作自己的文件夹和文件。 实现步骤 步骤一:创建文件夹和文件类 首先,我们需要创建两个类:Folder和F…

    Java 2023年5月19日
    00
  • java使用分隔符连接数组中每个元素的实例

    下面我将为你详细讲解Java中使用分隔符连接数组中每个元素的实例,主要包括以下内容: String中的join方法 StringBuilder/StringBuffer 1. String中的join方法 String中的join方法可以方便地将一个数组或集合中的元素以指定的分隔符连接起来。它的语法为: public static String join(C…

    Java 2023年5月26日
    00
  • Spring Security结合JWT的方法教程

    我来详细讲解一下“Spring Security结合JWT的方法教程”的完整攻略。 1. 什么是Spring Security和JWT Spring Security是一种基于框架的安全性解决方案,它为Java应用程序提供了身份验证和身份验证授权功能。 JWT(JSON Web Token)是一种身份验证和授权的标准,它将声明和签名打包在一个安全令牌中。JW…

    Java 2023年5月20日
    00
  • 解决程序包org.springframework.test.context不存在

    针对“解决程序包org.springframework.test.context不存在”的问题,我写了以下完整攻略供参考: 步骤一:确认依赖项 在Java项目中,我们通常使用Maven或Gradle等构建工具来管理项目的依赖项。当出现“程序包不存在”的错误时,首先需要确认项目中是否添加了相应的依赖项,也即相关的库是否被正确引用。对于Spring项目而言,常见…

    Java 2023年5月19日
    00
  • 浅谈Java中Lambda表达式的相关操作

    浅谈Java中Lambda表达式的相关操作 什么是Lambda表达式 Lambda表达式是Java8中引入的一种新特性,它允许我们以更简洁的方式定义单个抽象方法的接口,从而使得代码更加简洁易读。Lambda表达式可以看作是一种匿名函数,它可以像对象一样传递,并且支持在集合框架中进行高效的过滤和变换。 Lambda表达式的基本语法 Lambda表达式的语法由”…

    Java 2023年5月26日
    00
  • Java dbcp连接池基本使用方法详解

    首先,让我们来介绍一下什么是Java DBCP连接池。 什么是Java DBCP连接池? Java DBCP(Database Connection Pool)连接池是一种连接管理工具,它通过在内存中维护一定数量的数据库连接,避免了重复连接数据库的开销,提升了应用程序的性能。Java DBCP连接池可以在应用程序和数据库服务之间提供一个中间层,负责管理和分配…

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