Excel表格导入数据库进行判断是否有相同的数据

这个问题困惑了我1天的时间,终于解决了这个问题。这个问题说复杂也不复杂,说简单也不简单。

我先说一下我的业务需求。
我们大家都知道,数据库对应的实体类一般情况下是数据库的全部字段,往往导入的excel表格数据仅仅是某一些字段属性,这也是复杂点之一。
前端进行选择添加导入和覆盖导入两种情况,我分别设置了type类型分别为0和1,0的话就是添加导入人员,1的话就是覆盖导入人员,把之前的人员删除后重新添加。
其次是要进行判断导入的人员名字不能重复。
首先判断excel表格中的数据name这一列的数据是否重复,如果发现有重复的话就导入失败。
然后是判断excel表格的数据和数据库存在的数据进行对比判断,看看即将导入的人员是否和数据库的人员名字有相同的数据。否则导入失败。
需求就是这样,直接上代码。

依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>

这个是Controller层代码,前端需要用的接口

//获取excel表格的数据转成对象
List<TUser> list = ExcelReaderUtil.readExcel2Bean(in, T t);

这个是封装的工具类

import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;public class ExcelReaderUtil {/*** @methodName: readExcel 读取excel工具类* @param: [is, tClass]  传入的实体类,成员变量类型只能是基本类型和字符串* @return: java.util.List<T>* @auther: hwj* @date: 2019/8/9 11:24* @Description: 读取excel文件,将其转换为javabean*/public static <T> List<T> readExcel2Bean(InputStream is, Class<T> tClass)throws IOException, IllegalAccessException, InstantiationException {List<List<String>> list = ExcelReaderUtil.readExcel(is);List<T> listBean = new ArrayList<T>();Field[] fields = tClass.getDeclaredFields();List<Object> objects = new ArrayList<>();T uBean = null;for (int i = 1; i < list.size(); i++) {// i=1是因为第一行不要//System.out.println(list.size());uBean = (T) tClass.newInstance();List<String> listStr = list.get(i);//System.out.println(listStr.size());for (int j = 0; j < listStr.size(); j++) {if (j>=objects.size()){break;}Field field = listStr.get(j);if (field.name!=null){String datastring = listStr.get(j);field.setAccessible(true);if (datastring.length()>0&&datastring!=null) {Class<?> type = field.getType();// 只支持8中基本类型和String类型 如有其他类型 请自行添加if (type==String.class){field.set(uBean,datastring);}else  if(type==Integer.class||type==int.class){field.set(uBean,Integer.parseInt(datastring));}else  if(type==Double.class||type==double.class){field.set(uBean,Double.parseDouble(datastring));} else  if(type==Float.class||type==float.class){field.set(uBean,Float.parseFloat(datastring));} else  if(type==Long.class||type==long.class){field.set(uBean,Long.parseLong(datastring));}else if (type==Boolean.class||type==boolean.class){field.set(uBean,Boolean.parseBoolean(datastring));}else if (type==Short.class||type==short.class){field.set(uBean,Short.parseShort(datastring));}else if (type==Byte.class||type==byte.class){field.set(uBean,Byte.parseByte(datastring));}else if (type==Character.class ||type==char.class){field.set(uBean,datastring.charAt(0));}}}}listBean.add(uBean);}return listBean;}/*** Excel读取 操作,返回内容*/private static List<List<String>> readExcel(InputStream is)throws IOException {Workbook wb = null;try {wb = WorkbookFactory.create(is);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InvalidFormatException e) {e.printStackTrace();}/** 得到第一个sheet */Sheet sheet = wb.getSheetAt(0);/** 得到Excel的行数 */int totalRows = sheet.getPhysicalNumberOfRows();/** 得到Excel的列数 */int totalCells = 0;if (totalRows >= 1 && sheet.getRow(0) != null) {totalCells = sheet.getRow(0).getPhysicalNumberOfCells();}List<List<String>> dataLst = new ArrayList<List<String>>();/** 循环Excel的行 */for (int r = 0; r < totalRows; r++) {Row row = sheet.getRow(r);if (row == null)continue;List<String> rowLst = new ArrayList<String>();/** 循环Excel的列 */for (int c = 0; c < totalCells; c++) {Cell cell = row.getCell(c);String cellValue = "";if (null != cell) {HSSFDataFormatter hSSFDataFormatter = new HSSFDataFormatter();cellValue = hSSFDataFormatter.formatCellValue(cell);}//rowLst.add("0");rowLst.add(cellValue);}/** 保存第r行的第c列 */dataLst.add(rowLst);}return dataLst;}}

使用 EasyExcel,我们需要继承 AnalysisEventListener 。

public class UploadEasyExcelListener extends AnalysisEventListener {//可以通过实例获取该值private List<Object> datas = new ArrayList<Object>();public void invoke(Object o, AnalysisContext analysisContext) {datas.add(o);//数据存储到list,供批量处理,或后续自己业务逻辑处理。doSomething(o);//根据自己业务做处理}private void doSomething(Object object) {//1、入库调用接口}public List<Object> getDatas() {return datas;}public void setDatas(List<Object> datas) {this.datas = datas;}public void doAfterAllAnalysed(AnalysisContext analysisContext) {// datas.clear();//解析结束销毁不用的资源}
}

这个是完成导入的方法

try {in = serviceFile.getInputStream();excelReader = EasyExcel.read(in, TUser.class,new UploadEasyExcelListener(tUserService)).build();ReadSheet readSheet = EasyExcel.readSheet(0).build();excelReader.read(readSheet);} catch (IOException ex) {LOGGER.error("导入数据库失败", ex);System.out.println("数据库导入失败");return new CommonResult().validateFailed("数据库导入失败");} finally {close(in);// 这里一定别忘记关闭,读的时候会创建临时文件,到时磁盘会崩if (excelReader != null) {excelReader.finish();}}System.out.println("添加导入成功");

到此 导入excel数据到数据库已完成!

上面部分代码已罗列出来,入哪个地方不明白的,欢迎前来交流讨论。

###

Excel表格导入数据库进行判断是否有相同的数据相关推荐

  1. mysql导入复杂excel表格,较复杂的excel表格导入数据库oracle或mysql《》

    在JAVA web开发中怎么把Excel中的数据导入到oracle数据库中 1.准备数:在excel中出需要的数据 2.将excel中的数据另存为文件(有制表符分隔的) 3.将新保存到文本文件中的数据 ...

  2. php语言中Excel表格导入数据库的方法详解

    在php编程语言中,对于如何在Excel表格中导入数据库的方法是很多编程者比较头疼的一个问题,有些技术人员可能在百度尝试过搜索很多不同的问题,但是给出的答案经过自己测试之后,发现还是行不通,那么对此, ...

  3. java实现excel表格导入数据库表

    导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程 一.上传excel 前端jsp页面,我的是index.jsp 在页面中我自己加入了一个下载上传文 ...

  4. C# 或Asp.Net 将excel表格导入数据库

    一.把DataTable插入数据库 public static void DataTableToDB() {         string _strExcelFileName = @"D:\ ...

  5. 将excel表格导入数据库

    前言:csdn.net论坛里看到好多帖子在讨论如何读取Excel以及如何将DataTable插入DataBase的问题. 环境:c#.2005+Access 一.把DataTable插入数据库 pub ...

  6. Bootstrap:EXCEL表格导入、导出数据库

    后台代码如下: #region 将EXCEL表格导入数据库public void ImportFirstinspection(){try{Context context = new Context() ...

  7. oracle 导入excel时间格式,excel表格导入时间数据库中-excel导入数据库,我的日期是datatime()自动生成......

    如何将excel表格数据导入到oracle数据库对应的表中? 假定a1是你的mysql中的时间戳,要在B1取得普通的时间表示,则b1= =25569 A1*0.0000115743621516652 ...

  8. 导入excel表格到数据库、导入excel表格到数据库代码、根据excel表格路径将数据导入到数据库、验证要导入的excel表格数据、根据路径获取MultipartFile、FileItem文件

    导入excel表格到数据库.根据路径导入excel表格到数据库代码.根据excel表格路径将数据导入到数据库.验证要导入的excel表格数据.根据路径获取MultipartFile.FileItem文 ...

  9. 关于怎么把Excel表格导入MySQL数据库中

    关于怎么把Excel表格导入MySQL数据库中 第一步:建造Excel表格并且编辑数据. 1.我们要建立一个Excel表格文件 2.编辑我们需要的数据 3.保存到你知道的位置 第二步:在MySQL中建 ...

最新文章

  1. 【神经网络】(6) 卷积神经网络(VGG16),案例:鸟类图片4分类
  2. HTML样式以及使用
  3. python画树叶-Python如何生成树形图案
  4. Dreamweaver 2020安装教程
  5. vxetable显示html,vxe-table分页无法显示?
  6. Python TabError inconsistent use of tabs and spaces in indentation 错误问题描述以及解决
  7. 五大软件设计原则学习笔记4——接口隔离原则
  8. mysql测试权限_MySQL运行中被改权限测试
  9. Solr学习总结(1)——Apache Solr快速入门
  10. python搭建环境教程_python教程(一)·python环境搭建
  11. SQL Server同实例下不同数据库表的同步(job实现)
  12. mysql connector net 6.9.5_mysql connector/net6.9.5 下载 - 51下载网
  13. 汽车电子之NFC技术
  14. echarts柱形图+折线图混合案例
  15. 黑苹果+win10双系统折腾笔记
  16. 索尼PS VR2体验:硬件素质不错,高质量游戏是关键
  17. 网站空间和独享主机的区别是什么
  18. Android IPC 进程间通信
  19. 【Android Studio】为Android Studio设置HTTP代理
  20. 学习在不断进行中……

热门文章

  1. 基于PaddleOCR银行卡识别实现(一)
  2. docker logs-查看docker容器日志
  3. 解决阿里云服务器被恶意挖矿问题
  4. 算法的评价标准:ROC,假阳性,mape
  5. five 安卓应用|five 1.0.1 for android,Five小视频安卓版
  6. “超级计算机”——GPU云服务器
  7. 计算机专业专科可以进的国企,适合专科生报考的4大“专业”,国企事业单位抢着要,还能拿编制...
  8. 苹果召回MacBook Air 内地官网声明用英文遭指责
  9. 什么是CISSP(国际注册信息安全认证专家)?
  10. FFmpeg音频解码-音频可视化