Java如何将Excel数据导入数据库
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章给大家分享的是有关Java如何将Excel数据导入数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、根据业务需求设计数据库表2、根据数据库表设计一个Excel
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
惠州科信网络技术有限
新罗区金相网络技术工作室
在asp中如何连接数据库
山茶花网络技术公司
济宁睿付网络技术
虹口区服务软件开发管理办法
语句管理数据库的主要工具
阿里云app里怎么租用服务器
广州共享互联网科技有限公司
网络安全的法律法规试题
昆明计算机网络安全技术
医疗设备硬件软件开发外包
网络安全的视频一分钟以上
广州市天趣网络技术有限公司
武汉网络时钟同步服务器
云大物移的新一代网络技术
在服务器上有两个json文件
网络技术专业女生岗位
云南省中小学生网络安全知识
电话未接通显示无法连接到服务器
服务器 cpu指标
iis建站访问数据库教程
如何查找外文文献数据库
南通市软件开发有限公司招聘
数据库可以连接代码不能连接
高中网络安全简笔画
无线网络技术导论算法设计
开个软件开发工作室如何赚钱
网络安全行业学什么技术
结构仿真软件开发公司