POI实现excel各种验证和导入的思路总结
- 制定标准
导入总是与导出相辅相成的,无规矩不成方圆。所谓的标准都是大家一同来维护和遵守的,那么首先就是制定一个模板。
这样可以减少验证的工作量。
例如时间的规范【yyyy-MM-dd】,获取单元格的时间值用下面的方法
java.util.Date date= cell.getDateCellValue();
但是如果用户不合法输入,那么将会报IllegalStateException异常,此时我们可以进行错误的捕获和处理
导入的前提的数据是合法的,因此验证数据是非常必要的,数据的格式就要大家要遵守了。但是严谨而已,还是必须考虑用户的非法操作。
- 模板的标识
每个模板都有对应的标识,不可能随便什么数据都可以往数据库表对象中塞的,因此要设计一个标识符用于区分模板。
标识符必须是唯一的,可以识别的。通常都是指定导入对象的主键为标识符。
- 模板校验
如果模板限定了可以编辑区域,那么只是需要验证标识符即可。但是往往我们需要复制大量的数据,因此不可能设置保护模式,这个时候需要对模板进行格式校验。
校验包括模版格式校验、数据合法性校验,数据范围校验等等。
如果各种校验都用java程序来判断,那么数据量很大的时候,处理和执行速度会非常的慢。经过几天研究,发现善于利用oracle的语句可以使效率提高几十倍,前提
是数据都放在数据库中。
因此,除了简单的检验之后,我们可以将excel的数据放入到数据库创建的临时表或者日志表中,进行数据的校验。
创建的数据临时表必须满足两个条件,第一是含有模板标识符,第二是有一列指标用于存与excel对应的行数。
这样方便返回错误详细信息,告诉用户哪行哪列数据出现问题。
下面是几种简单的校验,非常实用:
@ 检验excel的数据是否重复(数据重复的标准是某几列的值是否相等,即数据唯一标识)
我们不需要循环excel一一对比,我们完全可以使用oracle函数实现数据重复检查
select distinct substr(数据唯一标识列数据) as rn from 数据临时表 a
where rowid !=(select max(rowid) from 数据临时表 b where 数据唯一标识列数据相等
得到的数据是去除重复的数据,只要小于总条数(excel的行数lastRow),那么就可以知道重复的数据。
@ 检验导入的数据是否已经存在
select columns from 数据正式表 INTERSECT (select columns from 数据临时表 where ..);
只要rs.next(),那么证明存在数据,并且可以获取到重复的数据。
POI实现excel各种验证和导入的思路总结的更多相关文章
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)
今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...
- POI实现excel的数据验证
目录 前言 难点1:合并单元格 代码实现策略: step 1: 合并单元格 step 2: 给单元格赋值 难点2:数据验证-下拉框 代码实现策略: step 1:设置需要进行数据验证的单元格范围和可供 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- SSM中使用POI实现excel的导入导出
环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...
- 【原创】POI操作Excel导入导出工具类ExcelUtil
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...
- poi实现excel的导入导出功能
Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- SpringBoot集成文件 - 集成POI之Excel导入导出
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...
随机推荐
- java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
今天使用hql语句的时候,遇到了一个这样的bug,修改的方法是
- cloudstack下libvirtd服务无响应问题
在cloudstack4.5.2版本下,偶尔出现libvirtd服务无响应的情况,导致virsh命令无法使用,同时伴随cloudstack master丢失该slave主机连接的情况.最初怀疑是lib ...
- <EffectiveJava>读书笔记--02泛型数组
1, java中可以申明泛型类型的数组引用; 2, 但是不能实例化一个泛型数组对象; 3, 针对第二点, 可以曲线救国, 实例化一个Object数组, 再进行类型强转; 见代码如下: public c ...
- Base:一种 Acid 的替代方案
原文链接: BASE: An Acid Alternative 数据库 ACID,都不陌生:原子性.一致性.隔离性和持久性,这在单台服务器就能搞定的时代,很容易实现,但是到了现在,面对如此庞大的访问量 ...
- Django 最好的缓存memcached的使用 小记
嗯,咳咳咳咳咳,这是在win平台上.linux平台上没折腾 首先你要在win上安装 Memcache 下载 :点我下载 里面有x64 和 x86 的.根据自己的系统版本来选择使用 使用命令行: 1 ...
- zabbix监控php-fpm性能状态
1. 启用php-fpm状态功能 # cat /usr/local/php/etc/php-fpm.conf | grep status_path pm.status_path = /status 2 ...
- MyEclipse去除网上复制下来的代码带有的行号
正则表达式去除代码行号 作为开发人员,我们经常从网上复制一些代码,有些时候复制的代码前面是带有行号,如: MyEclipse本身自带有查找替换功能,并且支持正则表达式替换,使用正则替换就可以很容易去除 ...
- [js高手之路] vue系列教程 - 实现留言板todolist(3)
通过前面两篇文章的的学习,我们掌握了vue的基本用法. 本文,就利用这些基础知识来实现一个留言板, 老外把他称之为todolist. 第一步.使用bootstrap做好布局 <!DOCTYPE ...
- python数据分析入门学习笔记
学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(四)用户接口层之处理SDP报文
当RTSP客户端向RTSP服务端发送DESCRIBE命令时,服务端理应当回复一条SDP报文. 该SDP报文中包含RTSP服务端的基本信息.所能提供的音视频媒体类型以及相应的负载能力,以下是一段SDP示 ...