通过捕获异常校验excel文件导入数据重复性(spring boot)
2019-01-07 23:27
627 查看
最近在项目中遇到一个需求,在excel导入中要对流水号这个字段进行重复性校验,不仅excel文件中该字段不能重复,而且要与数据库表中该字段也不能重复,若重复的话要进行提示,场景比较简单,如果导入的数据与数据库表中的数据重复,该如何精确高校的提示呢?如果和表中的数据进行比较,且数据量比较大的话,可能会导致堆内存溢出,下面通过建立唯一索引,通过捕获异常来实现;
/** excel上传 */ @PostMapping("excelUpload.do") public ResultResponse excelUpload(@RequestParam("file") MultipartFile file ) { ResultResponse response = new ResultResponse <>(); long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M if (file.getSize() > MAX_SIZE){ response.setMessage( "上传Excel文件不超过3M" ); return response; } //开始行 第一行是列名 int startRow = 1; //excel列 String[] column = new String[]{ID, DM, RQ, JE, JGHM, LSH}; try { //1.把excel转化为list,工具类就不帖出来了哈 response = ExcelImportPoi.excelToList( file, startRow, column ); List<Map<String, Object>> excelList = (List<Map<String, Object>>) response.getData(); if (null == excelList || excelList.size() == 0) { response.setMessage( "excel没有数据" ); return response; } Set<String> dataSet= new HashSet<String>(); for (int i = 0; i < excelList.size(); i++) { Map taxItemMap = excelList.get( i ); Object lsh = taxItemMap.get(LSH); if(!dataSet.add(lsh.toString())){ response.setCode("999"); response.setMessage("第"+(i+1)+"行流水号在Excel中存在重复数据!"); return response; } } //入库操作 batchInsertService.batchInsertTaxItem(excelList); response.setCode("000"); response.setMessage("导入数据成功!"); }catch (DuplicateKeyException e) { log.error( "上传excel异常,异常信息:" + e.getMessage() ); response.setCode("999"); String[] split = e.getCause().toString().split("'"); response.setMessage("流水号"+split[1]+"已存在,请勿重复上传"); return response; }catch (Exception e) { log.error( "上传excel异常,异常信息:" + e.getMessage() ); response.setCode("9999"); response.setMessage( "上传excel异常,异常信息:" + e.getMessage() ); } return response; }
以上方式供大家参考,如有更好的方式大家可以分享。
相关文章推荐
- Spring-Boot--日志操作【全局异常捕获消息处理☞日志控制台输出+日志文件记录】
- Spring-Boot--日志操作【全局异常捕获消息处理☞日志控制台输出+日志文件记录】
- Springboot上传excel并将表格数据导入或更新mySql数据库的过程
- java工具类之Excel文件导入、读取数据、通过url下载图片
- C#通过excel导入数据,上传文件
- spring boot 导入excel数据到mysql
- 如何通过pl/sql将excel文件数据导入到oracle
- 基于Spring3 MVC实现基于form表单上传Excel文件,批量导入数据时,报错:Unable to recognize OLE stream !
- Spring-Boot--日志操作全局异常捕获消息处理☞日志控制台输出+日志文件记录
- 如果通过toad得到表结构的sql语句?通过toad可以导入导出excel数据文件吗?
- Springboot上传excel并将表格数据导入或更新mySql数据库
- SpringBoot 异常处理,数据校验
- 通过Navicat向MySQL导入Excel文件格式数据的方法及遇到的问题
- 基于Spring3 MVC实现基于form表单上传Excel文件,批量导入数据!
- 通过java将txt文件中的调查问卷数据导入excel
- Spring boot 通过切面,实现超灵活的注解式数据校验
- SpringMVC/SpringBoot使用easypoi实现Excel文件导入导出功能实现
- 怎样从Excel文件将数据导入到SQL Server数据库?
- 将Excel文件数据导入数据到SQL数据库中
- powerbuilder把excel文件中数据导入到数据窗口中