小工具知识网

当前位置: 首页 > 行业知识 > 通过java将Excel表格导入数据到数据库

行业知识

通过java将Excel表格导入数据到数据库

2026-10-25 22:03:43 来源:互联网转载

2、连接数据库的框架可自行选择,下文使用的是mybatis-plus

Maven

org.apache.poi

poi

4.1.2

org.apache.poi

poi-ooxml

4.1.2

org.apache.poi

poi-ooxml-schemas

4.1.2

Gradle

compile ‘org.apache.poi:poi:4.1.2’

compile ‘org.apache.poi:poi-ooxml:4.1.2’

compile ‘org.apache.poi:poi-ooxml-schemas:4.1.2’

excel导入数据到数据库原理。


  1. 当我们拿到excel表格,我们第一步应该先读取excel里面的数据信息。
  1. 通过特定的方法将读出来的数据封装到对象中。
  1. 每一行表示一个对象,每一列表示一个对象中的每一个字段属性。
  1. 当有多行时我们需要使用List(Object是对应excel表格数据的实体类对象)来存取对象
  1. 拿到对象数组后,我们可以通过遍历得到,每一个对象,再通过mybatis将对象导入到数据库

知道了原理,有了思路。我们就可以开始干活了。

1、先拿到excel文件,我们使用MultipartFile接受文件。

2、拿到文件后。通过文件得到一个输入流

3、通过poi对excel进行解析,将表格中的每个数据通过for循环得到。

demo案例:(内附注释)

================================================================================

先了解到我们需要保存哪些字段。

根据字段。创建对应的实体类。

实体类


public class BuiPatientInfo{

private static final long serialVersionUID = 1L;

/**

  • 患者姓名

    */

    @TableField(“patient_name”)

    private String patientName;

    /**

    • 加密存储,不可反编译、列表不显示

      */

      @TableField(“patient_identity”)

      private String patientIdentity;

      /**

      • 就诊卡号

        */

        @TableField(“healing_Id”)

        private String healingId;

        /**

        • (性别)自动从身份证中截取

          */

          @TableField(“patient_sex”)

          private Integer patientSex;

          /**

          • (出生年月)自动从身份证中截取

            */

            @TableField(“patient_birthDate”)

            private LocalDate patientBirthdate;

            /**

            • 其他信息说明

              */

              @TableField(“else_Info”)

              private String elseInfo;

              /**

              • 创建人ID

                */

                @TableField(“create_id”)

                private Long createId;

                /**

                • 创建时间

                  */

                  @TableField(“create_time”)

                  private LocalDateTime createTime;

                  /**

                  • 最后修改时间

                    */

                    @TableField(“update_time”)

                    private LocalDateTime updateTime;

                    @TableField(“patient_state”)

                    private Integer patientState;

                    }

                    • 以下代码包含了对excel文件的检验是否合法。excel是哪年版的。

                      数据导入解析工具类


                      package com.mosukj.util;

                      import com.mosukj.manage.entity.BuiPatientInfo;

                      import com.spire.ms.System.DateTime;

                      import org.apache.poi.hssf.usermodel.HSSFCell;

                      import org.apache.poi.hssf.usermodel.HSSFWorkbook;

                      import org.apache.poi.ss.usermodel.*;

                      import org.apache.poi.xssf.usermodel.XSSFWorkbook;

                      import org.springframework.web.multipart.MultipartFile;

                      import java.io.IOException;

                      import java.io.InputStream;

                      import java.text.DecimalFormat;

                      import java.time.LocalDate;

                      import java.time.LocalDateTime;

                      import java.time.format.DateTimeFormatter;

                      import java.util.ArrayList;

                      import java.util.List;

                      /**

                      • @author xjt

                      • @version 1.0

                        */

                        public class ReadPatientExcelUtil {

                        //总行数

                        private static int totalRows = 0;

                        //总条数

                        private static int totalCells = 0;

                        //错误信息接收器

                        private static String errorMsg;

                        /**

                        • 读EXCEL文件,获取信息集合

                        • @return

                          */

                          public static List getExcelInfo(MultipartFile mFile) {

                          String fileName = mFile.getOriginalFilename();//获取文件名

                          try {

                          if (!validateExcel(fileName)) {// 验证文件名是否合格

                          return null;

                          }

                          boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本

                          if (isExcel2007(fileName)) {

                          isExcel2003 = false;

                          }

                          List userList = createExcel(mFile.getInputStream(), isExcel2003);

                          return userList;

                          } catch (Exception e) {

                          e.printStackTrace();

                          }

                          return null;

                          }

                          /**

                          • 根据excel里面的内容读取客户信息

                          • @param is 输入流

                          • @param isExcel2003 excel是2003还是2007版本

                          • @return

                          • @throws IOException

                            */

                            public static List createExcel(InputStream is, boolean isExcel2003) {

                            try{

                            Workbook wb = null;

                            if (isExcel2003) {// 当excel是2003时,创建excel2003

                            wb = new HSSFWorkbook(is);

                            } else {// 当excel是2007时,创建excel2007

                            wb = new XSSFWorkbook(is);

                            }

                            List userList = readExcelValue(wb);// 读取Excel里面客户的信息

                            return userList;

                            } catch (IOException e) {

                            e.printStackTrace();

                            }

                            return null;

                            }

                            /**

                            • 读取Excel里面客户的信息

                            • @param wb

                            • @return

                              */

                              private static List readExcelValue(Workbook wb) {

                              //默认会跳过第一行标题

                              // 得到第一个shell

                              Sheet sheet = wb.getSheetAt(0);

                              // 得到Excel的行数

                              totalRows = sheet.getPhysicalNumberOfRows();

                              // 得到Excel的列数(前提是有行数)

                              if (totalRows > 1 && sheet.getRow(0) != null) {

                              totalCells = sheet.getRow(0).getPhysicalNumberOfCells();

                              }

                              List userList = new ArrayList();

                              自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

                              深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

                              因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

                              既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

                              由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

                              如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

                              架构学习资料

                              由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

                              《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!

                              254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

                              架构学习资料

                              [外链图片转存中…(img-8bbvOySF-1712520210027)]

                              [外链图片转存中…(img-MBiRgm6N-1712520210028)]

                              [外链图片转存中…(img-jUfJuvrT-1712520210028)]

                              [外链图片转存中…(img-a1WCHKA6-1712520210028)]

                              [外链图片转存中…(img-mg4YUtRK-1712520210028)]

                              由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

                              《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!

上一篇:揭秘,获取SID源码的秘诀!

下一篇:Win10账户功能全解析,轻松掌握,开启极致系统体验之旅