Java如何将Excel数据导入数据库
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章给大家分享的是有关Java如何将Excel数据导入数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、根据业务需求设计数据库表2、根据数据库表设计一个Excel
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
如何在java显示数据库的时间
肇庆pc软件开发费用是多少
wcl没有服务器排名
18秒连接到服务器
博士后论文数据库
郑州社区团购软件开发公司
115 服务器
我们应该学好互联网和科技
传统软件开发主要采用
甘南县天气预报软件开发
太原触控拍照软件开发公司
网络技术实践应用
net访问数据库代码
省钱软件开发商
广东数据库空投箱现货
服务器安全加固费价格
高三毕业生可以读软件开发吗
县网络安全周启动仪式
三丰云服务器怎么获得
汽车网络技术的含义
网络安全培训老师
数据库怎么查建表时间查询
网络技术国外的发展
软件开发年薪40万
霍山县网络安全费用
网络安全技术科研人员分享
seas服务器
广东数据库空投箱现货
软件开发对电脑要求高
锦铭网络技术