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日

相关文章

  • IDEA下lombok安装及找不到get,set的问题的解决方法

    IDEA下lombok安装及找不到get,set的问题的解决方法 什么是Lombok Lombok是一个Java库,旨在通过注解的形式来简化Java对象的样板代码,例如Getter/Setter方法、构造函数、toString()方法等。Lombok可以使开发人员编写代码更加简短、易读和易于维护。通过引入Lombok库,Java开发人员可以使代码更加简洁,在…

    Java 2023年5月27日
    00
  • Java超详细讲解设计模式之一的单例模式

    Java超详细讲解设计模式之单例模式 1. 什么是单例模式? 单例模式是一种常用的设计模式,简单来说就是保证一个类只有一个实例,并且提供一个全局访问点。 它能够避免因为对象过多而导致系统性能下降的问题,实现对象的复用,以及编译器对一些变量、对象和方法进行统一管理的好处。 常见应用场景有以下几个方面: 一个对象需要在系统中被重复使用 一个共享资源(如数据库等)…

    Java 2023年5月26日
    00
  • 利用ECharts.js画K线图的方法示例

    下面是关于“利用ECharts.js画K线图的方法示例”的完整攻略。 什么是K线图 K线图是一种专业股票分析图表,它能够充分反映出股票市场的交易情况和趋势走势。K线图是由四个价格点构成的,包括开盘价、收盘价、最高价和最低价,每个价格点都用线条或实体块来表示。 使用ECharts.js绘制K线图 ECharts.js是一款非常强大的JavaScript图表库,…

    Java 2023年6月15日
    00
  • Java随机数算法原理与实现方法实例详解

    Java随机数算法原理与实现方法实例详解 随机数算法原理 随机数算法是根据一定的随机函数和一定的算法原理,生成一组具有随机性质的数值序列,其重要性在于可以产生安全可靠的加密密钥、模拟事件、以及用于科学计算等领域。Java语言对于随机数的生成提供了丰富的类库,包括java.util.Random和java.security.SecureRandom等类。 伪随…

    Java 2023年5月19日
    00
  • 以Java代码为例讲解设计模式中的简单工厂模式

    以下是关于“以Java代码为例讲解设计模式中的简单工厂模式”的完整攻略。 什么是简单工厂模式? 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最简单方式,就像工厂中生产不同产品一样,将对象的创建委托给具体的工厂类来实现。在简单工厂模式中,我们只需提供一个工厂类的实现,就能够根据所传入的参数去判断创建哪…

    Java 2023年5月23日
    00
  • 什么是线程调度?

    以下是关于线程调度的完整使用攻略: 什么是线程调度? 线程调度是指操作系统或者虚拟机在多线程环境下,按照一定的策略配 CPU 时间片给各个线程执行的过程。在多线程编程中,线程调度是非常重要的,它直接影到程序的性能和响应速度。 线程调度的主要任务是: 分配 CPU 时间片给各个线程执行; 确定的优先级; 确定线程的状态,如就绪、运行、阻塞等。 线程调度的实现方…

    Java 2023年5月12日
    00
  • Java如何对方法进行调用详解

    首先,我们需要了解什么是Java方法。在Java中,方法是一个可重用的代码块,它可以接受输入并执行某些操作后返回结果。Java的方法通常定义在类内部,可以在类内部或外部进行调用。以下是Java如何对方法进行调用的详解: 方法调用 Java中对方法的调用有两种方式: 对象方法调用 静态方法调用 对象方法调用 对象方法调用是指在类外部通过创建对象来调用类内部的方…

    Java 2023年5月26日
    00
  • Java毕业设计实战之共享租车信息管理系统的实现

    Java毕业设计实战之共享租车信息管理系统的实现 共享租车信息管理系统是一个基于Java的Web应用程序,它的主要作用是对租赁车辆进行管理和查询。本文将详细讲解实现该系统的完整攻略。 系统需求 在开始实现前,需要先明确系统的需求: 用户可以注册账号或使用已有账号登录系统; 用户可以浏览车辆信息,包含车辆图片、基本信息、租赁费用等; 用户可以选择租赁车辆,并提…

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