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 ...
随机推荐
- WCF Cookie处理
wcf操作cookie看似很简单,如果不对Wcf研究一把还是很难的,基本上无从下手. 这里上一图 上面的结果,岂止是坑爹,简直就是坑爹!!! 废话不多说,直接上代码: cookie读取 var req ...
- Vue组件基础用法
前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...
- java垃圾回收过程
对于年轻代,刚开始创建的对象都是放置在eden区的,而将年轻代分成3个部分,主要是为了生命周期短的对象尽量留在年轻代.当eden区申请不到空间的时候,进行minorGC,把存活的对象拷贝到survio ...
- Solr6.5配置中文分词器
Solr作为搜索应用服务器,我们在使用过程中,不可避免的要使用中文搜索.以下介绍solr自带的中文分词器和第三方分词器IKAnalyzer. 注:下面操作在Linux下执行,所添加的配置在windo ...
- 安徽省2016“京胜杯”程序设计大赛_G_木条染色
木条染色 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 134 Accepted: 20 Description 小 ...
- UITableView移除某行的分割线和让分割线宽度为cell的宽度
1.移除 UITableView 某一行的分割线 所谓移除,其实就是使其偏移出 cell 的显示范围,看不到即移除. 方法1: 移除系统的分割线,自己定义每行的分割线 self.tableView.s ...
- connect by prior 递归算法
http://blog.163.com/xxciof/blog/static/7978132720095193113752/ oracle中 connect by prior 递归算法 Oracle中 ...
- 地铁间谍 洛谷 p2583
题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰 ...
- ORACLE 程序包
程序包由PL/SQL程序元素(变量,类型)和匿名PL/SQL(游标),命名PL/SQL 块(存储过程和函数)组成. 程序包可以被整体加载到内存中,这样可以大大加快程序包中任何一个组成部分的访问速度. ...
- GBK和UTF-8互相转码
<1>.GBK ---> UTF-8 void ConvertGBKToUtf8(CString& strGBK) { , (LPCTSTR)strGBK, -, NULL, ...