Java如何将Excel数据导入数据库
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章给大家分享的是有关Java如何将Excel数据导入数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、根据业务需求设计数据库表2、根据数据库表设计一个Excel
千家信息网最后更新 2025年01月20日Java如何将Excel数据导入数据库
这篇文章给大家分享的是有关Java如何将Excel数据导入数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1、根据业务需求设计数据库表
2、根据数据库表设计一个Excel模板
模板的每列属性必须与表字段一一对应
3、环境准备
我这里项目环境是基于SpringBoot单体式架构,持久层用的公司框架,内置了基于MyBatis-Plus的各种单表操作的方法。
导入依赖
org.apache.poi poi 3.17 org.apache.poi poi-ooxml 3.17
4、通过插件生成表对应的实体类
/** * TbZbzs: 值班值守表 * @author zs * @date 2021-12-17 08:46:31 **/@Data@ApiModel(value="值班值守表,对应表tb_zbzs",description="适用于新增和修改页面传参")public class TbZbzs extends ProBaseEntity{ private static final long serialVersionUID = 1L; @ApiModelProperty(value="id") private String id; // id @ApiModelProperty(value="部门") private String bm; // 部门 @ApiModelProperty(value="值班上报") private String zbsb; // 值班上报 @ApiModelProperty(value="值班人员") private String zbry; // 值班人员 @ApiModelProperty(value="上报时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date sbsj; // 上报时间 @ApiModelProperty(value="结束时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date jssj; // 结束时间 @ApiModelProperty(value="联系方式") private String lxfs; // 联系方式 @ApiModelProperty(value="状态") private String zt; // 状态 /** * 逻辑删除 */ @ApiModelProperty(value="逻辑删除") private String delFlag; /** * 创建时间 */ @ApiModelProperty(value="创建时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate;}
5、自定义编写工具类
这里提供的是一个基础模板,根据业务的需求可以增加转换条件
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.IOException;import java.io.InputStream;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>对象 * @param in,fileName * @return * @throws Exception */ public static List
> getListByExcel(InputStream in, String fileName) throws Exception { List
> 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
>(); //遍历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
6、编写具体业务逻辑Service
主要思想:通过工具类将Excel文件解析成Object泛型的集合,再将集合循环遍历,在遍历中,将每行数据一次填入对象中,再每次循环中,将赋值后的对象存入一个list集合,最后统一将集合执行批量上传的方法,存入数据库。
public MapimportTprkxx(MultipartFile file){ Map resultMap = new HashMap<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List tbZbzsList = new ArrayList<>(); try { //获取数据 List > olist = ImportExcelUtil.getListByExcel(file.getInputStream(), file.getOriginalFilename()); resultMap.put("导入成功",200); //封装数据 for (int i = 0; i < olist.size(); i++) { List
list = olist.get(i); if (list.get(0) == "" || ("序号").equals(list.get(0))) { continue; } TbZbzs tbZbzs = new TbZbzs(); tbZbzs.setId(UUID.randomUUID().toString().replace("-", "").substring(0, 20)); //根据下标获取每一行的每一条数据 if (String.valueOf(list.get(0))==null) { resultMap.put("state", "部门不能为空"); continue; } tbZbzs.setBm(String.valueOf(list.get(0))); if (String.valueOf(list.get(1))==null) { resultMap.put("state", "值班上报不能为空"); continue; } tbZbzs.setZbsb(String.valueOf(list.get(1))); if (String.valueOf(list.get(2))==null) { resultMap.put("state", "值班人员不能为空"); continue; } tbZbzs.setZbry(String.valueOf(list.get(2))); if (String.valueOf(list.get(3))==null) { resultMap.put("state", "导入失败,上报时间不能为空"); continue; } String dateStr3 = String.valueOf(list.get(3)); Date date3 = simpleDateFormat.parse(dateStr3); tbZbzs.setSbsj(date3); if (String.valueOf(list.get(4))==null) { resultMap.put("state", "导入失败,结束时间不能为空"); continue; } String dateStr4 = String.valueOf(list.get(4)); Date date4 = simpleDateFormat.parse(dateStr4); tbZbzs.setJssj(date4); if (String.valueOf(list.get(5))==null) { resultMap.put("state", "联系方式不能为空"); continue; } tbZbzs.setLxfs(String.valueOf(list.get(5))); if (String.valueOf(list.get(6))==null) { resultMap.put("state", "状态不能为空"); continue; } tbZbzs.setZt(String.valueOf(list.get(6))); if (String.valueOf(list.get(7))==null) { resultMap.put("state", "逻辑删除不能为空"); continue; } tbZbzs.setDelFlag(String.valueOf(list.get(7))); if (String.valueOf(list.get(8))==null) { resultMap.put("state", "导入失败,创建时间不能为空"); continue; } String dateStr8 = String.valueOf(list.get(8)); Date date8 = simpleDateFormat.parse(dateStr8); tbZbzs.setCreateDate(date8); tbZbzsList.add(tbZbzs); } int i = tbZbzsDao.insertTbZbzsList(tbZbzsList); if (i != 0) { resultMap.put("state", "导入成功"); }else { resultMap.put("state", "导入失败"); } } catch (Exception e) { e.printStackTrace(); resultMap.put("state", "导入失败"); } return resultMap; }
7、在dao层对应的xml文件中,编写批量上传的方法
insert into tb_zbzs ( id, bm, zbsb, zbry, sbsj, jssj, lxfs, zt, del_flag, create_date ) VALUES ( #{item.id}, #{item.bm}, #{item.zbsb}, #{item.zbry}, #{item.sbsj}, #{item.jssj}, #{item.lxfs}, #{item.zt}, #{item.delFlag}, #{item.createDate} )
8、Controller实现业务的控制
/** * @方法名称: excelProTbZbzs * @实现功能: 导入值班值守表Excel TODO: 方法入参根据页面对象设置 * @param file * @return java.lang.String * @create by zyw at 2022-03-17 16:49:31 **/ @ApiOperation(value="导入值班值守表Excel",notes="返回导入情况接口",response = TbZbzs.class) @PostMapping(value = "/excelProTbZbzs") public String excelProTbZbzs(@RequestParam("file") MultipartFile file){ try { return buildResultStr(service.importTprkxx(file).get("state").equals("导入成功") ? buildSuccessResultData() : buildErrorResultData(service.importTprkxx(file).get("state").toString())); }catch (RuntimeException e){ logError(log, e); return buildResultStr(buildErrorResultData(e)); } }
9、通过Swagger测试接口
10、在数据和控制台中查看导入效果
感谢各位的阅读!关于"Java如何将Excel数据导入数据库"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
数据
值班
时间
数据库
文件
方法
格式
业务
对象
逻辑
成功
人员
工具
方式
模板
版本
状态
联系方式
部门
联系
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发竞标评审表
网络安全中存在的威胁
服务器巡检目的
广东省百望电子发票服务器地址
计算机网络技术软件百度云
4u服务器机箱尺寸
关于宣传网络安全知识的小品
网络技术测试员
关系数据库管理系统的典型代表
统一软件开发的方法
天龙八部怎样找到服务器
服务器专业系统
软件开发 上海 北京 工资
武汉大学网络安全学院杜瑞颖
网络安全技术期刊
杭州互联网软件开发定制费用
个人电脑虚拟服务器有什么用处
虹口区服务软件开发专业服务
国内服务器如何备案
vs2017做数据库
邮件服务器dns域名解析
服务器怎么创建网页
网络安全大赛图标
2021年部队网络安全
按键精灵获取客户端数据库
云课堂网络安全
密码法与网络安全
网络安全专业能做开发吗
成都实力教育系统开发软件开发
数据库查询实验