Java如何将Excel数据导入数据库
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关Java如何将Excel数据导入数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、根据业务需求设计数据库表2、根据数据库表设计一个Excel
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
新华互联网科技学校
盈实互联网科技
互联网科技有限公司图片
没上市的科技互联网公司
互联网金融科技平台
互联网科技网站
深圳艾佳互联网科技
一五八零互联网科技
科技类的互联网平台
哈尔滨新华互联网科技
栖莱科技互联网股份有限公司
互联网科技和信息
深圳市罗太互联网科技有限公司
科技赋能视角下互联网保险发展
烟台灵鸽互联网科技有限公司
华中科技大学互联网的牛人
中天科技中国工业互联网
济南小医互联网科技有限公司招聘
普陀区互联网教育科技管理办法
绵阳真晨互联网科技有限公司
互联网黑科技
与互联网科技公司
朗涯互联网科技
极限挑战互联网科技
恒生科技互联网指数分析
以后互联网后是啥科技
岳阳华臻互联网科技有限公司
银行科技岗属于互联网吗
本届互联网大会上的黑科技
利用互联网等科技手段