•    制定标准

  导入总是与导出相辅相成的,无规矩不成方圆。所谓的标准都是大家一同来维护和遵守的,那么首先就是制定一个模板。

   这样可以减少验证的工作量。

   例如时间的规范【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各种验证和导入的思路总结的更多相关文章

  1. Java开发小技巧(六):使用Apache POI读取Excel

    前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...

  2. POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

    今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...

  3. POI实现excel的数据验证

    目录 前言 难点1:合并单元格 代码实现策略: step 1: 合并单元格 step 2: 给单元格赋值 难点2:数据验证-下拉框 代码实现策略: step 1:设置需要进行数据验证的单元格范围和可供 ...

  4. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  5. SSM中使用POI实现excel的导入导出

    环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...

  6. 【原创】POI操作Excel导入导出工具类ExcelUtil

    关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...

  7. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

  8. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  9. SpringBoot集成文件 - 集成POI之Excel导入导出

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...

随机推荐

  1. java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I

    今天使用hql语句的时候,遇到了一个这样的bug,修改的方法是

  2. cloudstack下libvirtd服务无响应问题

    在cloudstack4.5.2版本下,偶尔出现libvirtd服务无响应的情况,导致virsh命令无法使用,同时伴随cloudstack master丢失该slave主机连接的情况.最初怀疑是lib ...

  3. <EffectiveJava>读书笔记--02泛型数组

    1, java中可以申明泛型类型的数组引用; 2, 但是不能实例化一个泛型数组对象; 3, 针对第二点, 可以曲线救国, 实例化一个Object数组, 再进行类型强转; 见代码如下: public c ...

  4. Base:一种 Acid 的替代方案

    原文链接: BASE: An Acid Alternative 数据库 ACID,都不陌生:原子性.一致性.隔离性和持久性,这在单台服务器就能搞定的时代,很容易实现,但是到了现在,面对如此庞大的访问量 ...

  5. Django 最好的缓存memcached的使用 小记

    嗯,咳咳咳咳咳,这是在win平台上.linux平台上没折腾 首先你要在win上安装 Memcache 下载 :点我下载 里面有x64 和 x86 的.根据自己的系统版本来选择使用   使用命令行: 1 ...

  6. zabbix监控php-fpm性能状态

    1. 启用php-fpm状态功能 # cat /usr/local/php/etc/php-fpm.conf | grep status_path pm.status_path = /status 2 ...

  7. MyEclipse去除网上复制下来的代码带有的行号

    正则表达式去除代码行号 作为开发人员,我们经常从网上复制一些代码,有些时候复制的代码前面是带有行号,如: MyEclipse本身自带有查找替换功能,并且支持正则表达式替换,使用正则替换就可以很容易去除 ...

  8. [js高手之路] vue系列教程 - 实现留言板todolist(3)

    通过前面两篇文章的的学习,我们掌握了vue的基本用法. 本文,就利用这些基础知识来实现一个留言板, 老外把他称之为todolist. 第一步.使用bootstrap做好布局 <!DOCTYPE ...

  9. python数据分析入门学习笔记

    学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...

  10. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(四)用户接口层之处理SDP报文

    当RTSP客户端向RTSP服务端发送DESCRIBE命令时,服务端理应当回复一条SDP报文. 该SDP报文中包含RTSP服务端的基本信息.所能提供的音视频媒体类型以及相应的负载能力,以下是一段SDP示 ...