把excel数据导入数据库之java实现

java实现excel表格数据导入数据库中 * 阅读详情

本人用的是springboot+gradle
话不多说,直接上干货:

package com.gpt.web.front.controller.content;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gpt.common.core.domain.AjaxResult;
import com.gpt.common.utils.SnowFlakeUtil;
import com.gpt.manage.domain.QCategorize;
import com.gpt.manage.domain.QConversation;
import com.gpt.manage.domain.QTemplate;
import com.gpt.manage.service.QCategorizeService;
import com.gpt.manage.service.QConversationService;
import com.gpt.manage.service.QTemplateService;
import com.gpt.web.front.utils.ImportExcelUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Api(tags = {"导入数据库模板信息"})
@RestController
@RequestMapping("/importSql")
@Slf4j
public class ImportSqlController {
    /**
     * 导入数据库模板
     *
     * @author wangjj
     * @version 1.0
     * @date 2023/3/17 14:42
     */
    @Autowired
    private QTemplateService templateService;
    @Autowired
    private QCategorizeService categorizeService;

    @PostMapping(value = "/excelToSql")
    public AjaxResult excelProTbZbzs(@RequestParam("file") MultipartFile file) {
        List<QTemplate> template = new ArrayList<>();
        try {
            //验证文件类型
            if (!file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).equals(".xls") && !file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).equals(".xlsx")) {
                AjaxResult.error("mete", "文件类型有误!请上传Excle文件");
                throw new Exception("文件类型有误!请上传Excle文件");
            }

            //获取数据
            List<List<Object>> olist = ImportExcelUtil.getListByExcel(file.getInputStream(), file.getOriginalFilename());

            //封装数据
            for (int i = 0; i < olist.size(); i++) {
                List<Object> list = olist.get(i);
                if (list.get(0) == "" || ("序号").equals(list.get(0))) {
                    continue;
                }
                QTemplate t = new QTemplate();

                //标题
                if (String.valueOf(list.get(0)) == null || String.valueOf(list.get(0)).equals("")) {
                    AjaxResult.error("TemplateTitle", "标题不能为空");
                    throw new Exception("标题不能为空");
                }
                t.setTemplateTitle(String.valueOf(list.get(0)));
                //内容
                if (String.valueOf(list.get(1)) == null || String.valueOf(list.get(1)).equals("")) {
                    AjaxResult.error("mete", "内容不能为空");
                    throw new Exception("TemplateContent不能为空");
                }
                t.setTemplateContent(String.valueOf(list.get(1)));

                //分类id
                if (StringUtils.isNotEmpty(String.valueOf(list.get(2)))) {
                    QCategorize categorize = categorizeService.getOne(new LambdaQueryWrapper<QCategorize>().eq(QCategorize::getName, String.valueOf(list.get(2))));
                    if (categorize != null) {
                        t.setCategorizeId(categorize.getId());
                    }
                }
                //分类内容
                if (String.valueOf(list.get(2)) == null || String.valueOf(list.get(2)).equals("")) {
                    AjaxResult.error("Categorize", "分类内容不能为空");
                    throw new Exception("分类内容不能为空");
                }
                t.setCategorize(String.valueOf(list.get(2)));
                t.setGrade(Integer.parseInt(String.valueOf(list.get(3))));
                t.setCreateDate(new Date());
                t.setUpdateDate(new Date());
                template.add(t);
            }
            templateService.insertListInfo(template);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return AjaxResult.success("插入数据库成功");
    }
}

工具类如下:

package com.gpt.web.front.utils;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * 新增值班排班表导入Excel表工具类
 * zyw
 */
public class ImportExcelUtil {
    private final static String excel2003L = ".xls";    //2003- 版本的excel
    private final static String excel2007U = ".xlsx";   //2007+ 版本的excel

    /**
     * 描述:获取IO流中的数据,组装成List<List<Object>>对象
     *
     * @param in,fileName
     * @return
     * @throws Exception
     */
    public static List<List<Object>> getListByExcel(InputStream in, String fileName) throws Exception {
        List<List<Object>> list = null;

        //创建Excel工作薄
        Workbook work = ImportExcelUtil.getWorkbook(in, fileName);
        if (null == work) {
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;

        list = new ArrayList<List<Object>>();
        //遍历Excel中所有的sheet
        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if (sheet == null) {
                continue;
            }

            //遍历当前sheet中的所有行
            for (int j = sheet.getFirstRowNum(); j < sheet.getLastRowNum() + 1; j++) {
                row = sheet.getRow(j);
                if (row == null || row.getFirstCellNum() == j) {
                    continue;
                }

                //遍历所有的列
                List<Object> li = new ArrayList<Object>();
                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                    cell = row.getCell(y);
                    li.add(ImportExcelUtil.getCellValue(cell));
                }
                list.add(li);
            }

        }
//        work.close();
        return list;
    }

    /**
     * 描述:根据文件后缀,自适应上传文件的版本
     *
     * @param inStr,fileName
     * @return
     * @throws Exception
     */
    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
        Workbook wb = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (excel2003L.equals(fileType)) {
            wb = new HSSFWorkbook(inStr);  //2003-
        } else if (excel2007U.equals(fileType)) {
            wb = new XSSFWorkbook(inStr);  //2007+
        } else {
            throw new Exception("解析的文件格式有误!");
        }
        return wb;
    }

    /**
     * 描述:对表格中数值进行格式化
     *
     * @param cell
     * @return
     */
    public static Object getCellValue(Cell cell) {
        Object val = null;
        DecimalFormat df = new DecimalFormat("0");  //格式化number String字符
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");  //日期格式化
//        DecimalFormat df2 = new DecimalFormat("0.00");  //格式化数字

        if (cell != null) {
            if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) {
                val = cell.getNumericCellValue();
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换
                } else {
                    if ((Double) val % 1 > 0) {
                        val = new BigDecimal(val.toString());
                    } else {
                        val = new DecimalFormat("0").format(val);
                    }
                }
            } else if (cell.getCellTypeEnum() == CellType.STRING) {
                val = cell.getStringCellValue();
            } else if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
                val = cell.getBooleanCellValue();
            } else if (cell.getCellTypeEnum() == CellType.ERROR) {
                val = cell.getErrorCellValue();
            }
//            switch (cell.getCellType()) {
//                case Cell.CELL_TYPE_STRING:
//                    value = cell.getRichStringCellValue().getString();
//                    break;
//                case Cell.CELL_TYPE_NUMERIC:
//                    if("General".equals(cell.getCellStyle().getDataFormatString())){
//                        value = df.format(cell.getNumericCellValue());
//                    }
//                    else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){
//                        value = sdf.format(cell.getDateCellValue());
//                    }
//                    else{
//                        value = sdf.format(cell.getDateCellValue());
//                    }
//                    break;
//                case Cell.CELL_TYPE_BOOLEAN:
//                    value = cell.getBooleanCellValue();
//                    break;
//                case Cell.CELL_TYPE_BLANK:
//                    value = "";
//                    break;
//                default:
//                    break;
//            }
        }
        return val;
    }
}

注意:需要导入POI需要的包

 compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
Java实现Excel导入数据到数据库(支持xls、xlsx) Java实现Excel导入(支持xls、xlsx) 阅读详情

相关推荐

Java实现Excel数据导入数据库

这里提供的是一个基础模板,根据业务的需求可以增加转换条件/***新增值班排班表导入Excel表工具类*zyw*///2003-版本的excel//2007+版本的excel/***描述获取IO流中的数据,组装成List对象*@return*///创建Excel工作薄thrownewException("创建Excel工作薄为空!");}//遍历Excel中所有的sheeti++){}...

m0_67401545的博客 419

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

一、首先。我们使用到的是alibaba的开源框架《EasyExcel》 1、导入相应的依赖包 Maven <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4

languageStudent的博客 3万+

Java实现百万级数据从Excel导入到数据库

在一个后台管理功能中,Excel导入数据是不可缺少,但是当处理大数据量的Excel文件导入时候就可能会带来一些列的问题,本文我们会分析问题产生的原因。并提供解决方案以及完整的实现代码。

小徐的博客 6778

Excel工具类

/** Excel相关处理 @author hbt */ public class ExcelUtil extends DataDictConverUtil { private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); /** * Excel sheet最大行数,默认65536 */ publi...

Just1like_this的博客 1322

使用Java将Excel数据导入数据库

记得在使用Apache POI和Java JDBC之前,确保已正确设置项目的依赖项,并且已经安装并配置了相应的数据库驱动程序。在Java中,我们可以使用一些库和工具来将Excel数据导入数据库。在本文中,我们将使用Apache POI库来读取Excel文件,以及使用Java JDBC来连接和操作数据库。现在我们已经读取了Excel文件中的数据并建立了数据库连接,接下来我们可以将数据插入数据库表中。在将Excel数据导入数据库之前,我们需要建立与数据库的连接。引入所需的库和依赖项。

TechWhiz的博客 1217

从C-EPS到DP-EPS:手把手图解不同EPS类型怎么选,对你的车操控感影响有多大?

方向盘转动时那股细腻的阻尼感,高速过弯时令人安心的沉稳,或是狭窄车位里一根手指就能拨动的轻盈——这些看似微妙的差异,其实都源自转向系统电机那几厘米的安装位置变化。当我们谈论驾驶乐趣时,发动机参数和悬架调校总是占据C位,但真正连接驾驶者与车辆的神经末梢,恰恰是那套默默工作的电动助力转向系统(EPS)。不同EPS类型带来的操控特性差异,可能比马力数字更能定义一辆车的性格。

weixin_30920513的博客 532

excel导入数据库java_Java实现Excel导入数据库,数据库中的数据导入到Excel

自学资料总结实现的功能:Java实现Excel导入数据库,如果存在就更新数据库中的数据导入到Excel1、添加jxl.jarmysql-connector-java.1.7-bin.jar包到项目的lib目录下­2、Excel文件目录:D://book.xls3、数据库名:javenforexcel4、表名:stu5、编写类:连接mysql的字符串方法、插入的方法、实体类­­表结构如下 :连接数...

weixin_39683241的博客 196

【软件使用】Calibre部分提参的实战技巧与常见问题解析

本文详细解析了Calibre部分提参(Partial PEX)的实战技巧,重点介绍了如何利用HCELL与XCELL文件高效排除已知模块,实现精准的寄生参数提取,从而快速定位后仿真中的时序与信号完整性问题。文章涵盖了从图形界面到命令行的完整操作流程,并提供了常见问题(如时钟失真、模块“消失”)的深度Debug指南与最佳实践,助力芯片设计工程师提升验证效率。

yhn456789的博客 1030

Java实现Excel导入数据库,数据库中的数据导入到Excel

1、添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­。System.err.println("无法连接数据库" );5、编写类:连接mysql的字符串方法、插入的方法、实体类­­。读取Excel表中所有的数据、操作数据(查询、更新)Label(1, 0, "姓名(name)");Label(2, 0, "性别(sex)");Label(3, 0, "薪水(num)");Label(0, 0, "编号(id)");该代码数据库没有关闭,使用需修改。

envy_L的专栏 1379

从零开始理解固定翼能量控制:Pixhawk TECS算法保姆级教程

本文深入解析了Pixhawk飞控中的TECS(总能量控制)算法,旨在解决固定翼无人机纵向控制中速度与高度耦合的经典难题。教程从物理概念出发,阐释了TECS通过管理总能量与分配能量形态来实现油门与升降舵解耦的核心思想,并提供了参数调试的实战指南,帮助开发者优化飞行性能。

white的博客 251

RTC时钟芯片替换代码移植-IIC通信

1、问题 RTC时钟芯片由爱普生RX-8010SJ更换成大普INS5710A,两者都是IIC通信,更换大普芯片后时钟不走、以及报掉电错误。仿真分析原因是CPU和RTC芯片收发数据延时不够导致,根据爱普生芯片手册,8010收发数据不采取延时,但大普芯片采用同样方式读取不行(需要加延时) 2、RX-8010SJ手册说明(以读取数据为例) (1)寄存器读操作时序图 指定地址读操作: 1)CPU 发送开始条件[S] 2)CPU 传输RX-8010SJ 的从地址,用R/W 位设定写模式 3)检测从RX-8010

weixin_42851683的博客 2067

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

先引入Apache poi的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency>

weixin_44950062的博客 1916

YOLOv11涨点改进| CVPR 2026 |独家创新首发、特征融合改进篇| 引入FAAFusion傅里叶角对准融合模块,促进高低频特征融合,增强模型在小目标、密集目标检测和旋转目标检测任务高效涨点

🔥本文提出FAAFusion傅里叶角对准融合模块,用于改进YOLOv11网络模型。该模块通过在特征金字塔融合阶段对齐高低层特征的方向信息,缓解传统FPN直接融合带来的方向冲突问题。FAAFusion利用傅里叶旋转等变性原理,在频域估计主方向并进行特征对齐,显著提升了多尺度特征表达的一致性与有效性。实验表明,该方法在DOTA等遥感数据集上取得了新的最先进水平,特别适用于旋转目标检测任务。文章详细介绍了模块原理、结构优势,并提供了三种不同的YOLOv11改进配置方案和完整的核心代码实现。

Ai缝合怪、助力小伙伴高效发论文 154

java 实现Excel批量导入数据库 及生成excel

package com.yudianbank.front.util; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.Fil

maoyinghua的博客 1544

一文掌握 Playwright 的详细使用

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

数据知道的博客 1万+

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 339

java excel批量导入数据库数据_用java实现excel数据批量导入数据库

不管是做软件还是做网站,相信很多人在做的时候都要用到数据库,而数据库的数据从何而来呢,可以使手动添加的,但是大多数情况下我们使用的是已有的数据,我们想借助开发的工具管理目前已有的数据,如果是小量的数据,手动录入也无妨,但是对于大量数据呢,手动录入显然已经不显示,而且,更多的时候,我们呢想在软件上增加一个数据的批量导入,这样不管是谁在用这款软件,都可以方便的管理已有数据,那么我们最常用的数据管理器是...

weixin_36145673的博客 401

第5.2章 【自动驾驶行业融合定位核心】:手把手详解ESKF(误差卡尔曼滤波)理论公式及代码

自动驾驶定位中的ESKF(误差卡尔曼滤波)技术是解决IMU累积误差的关键,通过分离名义状态与误差状态实现高精度定位。其核心步骤包括:1)名义状态递推(位置/速度/姿态的基础物理计算);2)误差传播建模(雅可比矩阵F量化误差影响);3)协方差更新(评估定位不确定性)。ESKF在GNSS信号丢失(如隧道场景)、无卫星定位(地下车库)等场景发挥重要作用,通过融合多传感器数据维持定位精度。工程实现需解决零偏校准、协方差投影等关键问题,噪声参数需通过数据标定而非随意设置。掌握ESKF原理与实现是自动驾驶定位工程师的核

行知SLAM 707

用java实现excel数据批量导入数据库

标签:javaexcelaccessjxl批量导入数据it分类:技术<br />不管是做软件还是做网站,相信很多人在做的时候都要用到数据库,而数据库的数据从何而来呢,可以使手动添加的,但是大多数情况下我们使用的是已有的数据,我们想借助开发的工具管理目前已有的数据,如果是小量的数据,手动录入也无妨,但是对于大量数据呢,手动录入显然已经不显示,而且,更多的时候,我们呢想在软件上增加一个数据的批量导入,这样不管是谁在用这款软件,都可以方便的管理已有数据,那么我们最常用的数据管理器是什么呢,毫无疑问Excel,但是

zhaochunyang2000的专栏 4409

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java实现Excel数据导入到数据库:项目推荐

Java实现Excel数据导入到数据库:项目推荐 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 高效地将Excel数据导入数据库,实现数据自动更新。 项目介绍 在现代软件开发中,数据导入和导出是常见的需求。为此,我们推荐一款名为“Java实现Excel数据导入到数据库”的开源项目。该项目提供了一种简便、高效的Java实现方式,用于将Excel表格中的数据导入...

gitblog_06783的博客 931

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 谷歌授权登录开发
下一篇: 谷歌excel表格批量翻译各国语言
@卓越俊逸_角立杰出@
博客等级 码龄9年 4701粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值