Excel通过POI大数据导入数据库通用方案.docx
《Excel通过POI大数据导入数据库通用方案.docx》由会员分享,可在线阅读,更多相关《Excel通过POI大数据导入数据库通用方案.docx(14页珍藏版)》请在冰豆网上搜索。
Excel通过POI大数据导入数据库通用方案
一、总体设计思路错误!
未指定书签。
二、导入规则表设计错误!
未指定书签。
1、数据导入表规则错误!
未指定书签。
2、数据导入列规则错误!
未指定书签。
三、导入规则类设计错误!
未指定书签。
四、界面设计错误!
未指定书签。
1、规则配置界面错误!
未指定书签。
2、导入数据界面错误!
未指定书签。
五、导入逻辑错误!
未指定书签。
六、内部评审补充错误!
未指定书签。
此文档仅为设计方案,如要查看具体实现,请联系我所要源码
通用导入设计方案
一、总体设计思路
考虑到导入在项目中应用较多,随后其他项目中都会用到,为了减少重复工作,不必因为的样式、数据等变化而重新编码,重复劳动,因此必须抽取通用的东西出来,封装共同点,暴露个性点,使用时只需要关注相关业务,而不必关注的读取和存储。
考虑到这个情况,可以使用规则配置来解决这个问题。
配置规则的时候,需要配置要导入的表,字段等信息,导入的时候依据这个规则将数据导入到数据库中。
这样一来,在进行导入时候只需要为某种数据配置一个规则,然后调用封装的导入类就可以完成整个导入的工作了。
实现源码参见
二、导入规则表设计
1、数据导入表规则
字段名
字段类型
允许值
默认值
备注
主键
2(32)
否
唯一标识,
是
否
创建时间
2(32)
否
规则名称
2(16)
否
结束行,空行或第N行
否
1
标题行索引
否
2
数据行索引
2(32)
否
表名称
否
0
是否删除重复行0不删除1删除
否
1
有效标识,删除标识
1
2(256)
是
扩展字段1
2
2(256)
是
扩展字段2
3
2(256)
是
扩展字段3
4
2(256)
是
扩展字段4
5
2(256)
是
扩展字段5
(1):
数据表唯一标识,没有业务含义;
(2):
创建时间;
(3):
规则名称;
(4):
数据读取结束标识,标识遇到空行结束,数字N表示读取到第N行结束;
(5):
标题行索引,默认值为1,表示第一行是标题行;
(6):
数据开始行索引,默认值为2,表示第2行开始是正式数据;
(7):
表名称,表示这个规则是针对这个表的数据导入定义的;
(8):
是否删除重复行,即是否导入重复数据,0则不删除,直接导入,1则先删除重复数据,然后再导入;是否重复根据规则表的字段来判定,重复行是指数据库中存在及中相同的数据;
(9):
有效标识;
2、数据导入列规则
字段名
字段类型
允许值
默认值
备注
主键
2(32)
否
唯一标识,
是
2(32)
否
表的主键
否
0
是否是主键
2(32)
否
生成方法,导入数据/自定义策略/默认值
否
0
是否唯一,用来判定重复数据
2(32)
否
列名称
2(32)
否
对应列头
否
1
是否必须填入0不必须1必须
2(16)
否
数据类型,
否
0
允许最大存储长度,字节
2(32)
是
生成方法值,策略方法名/默认值
2(128)
是
备注
否
0
是否属于字典0不属于1属于
2(32)
是
字典表名称
2(32)
是
字典类型字段名
2(32)
是
字典类型
2(32)
是
字典表最终获取值列的名称
2(32)
是
字典表参考列的名称
否
1
是否有效
1
2(256)
是
扩展字段1
2
2(256)
是
扩展字段2
3
2(256)
是
扩展字段3
4
2(256)
是
扩展字段4
5
2(256)
是
扩展字段5
(1):
数据表唯一标识,没有业务含义;
(2):
表的主键,表示这条列规则是属于哪个表的规则;
(3):
是否是主键;
(4):
数据生成策略,导入数据/自定义策略/默认值,三种策略供选择;
(5):
是否唯一,用来判定重复数据;
(6):
列名称,对应表中的列名;
(7):
列标题,及数据表列是对应的;
(8):
是否必须导入,0不必须1必须;
(9):
数据类型,数字还是字符,;
(10):
最大允许长度,不能大于,数据表中该列的长度;
(11):
数据生成策略值,导入数据是为空,自定义策略是为策略方法名,或者是默认值;
(12):
备注;
(13):
最终导入数据是否来源于字典,0不1是;
(14):
字典数据来源表的名称;
(15):
字典类型列的字段名;
(16):
该列所属的字典类型值;
(17):
字典表最终获取值列的名称,例如:
现在需要导入“编码器类型”,内容是“飞利浦”,“编码器类型”是一个字典,对应的字典表是“”,“飞利浦”是“”列的值,而数据表需要存入的是“”列的值,这时“”就是,而“”就是,“”是;
(18):
参见第17条说明。
(19):
该规则是否有效;
三、导入规则类设计
{
成功数目
失败数目
}
{
;
(){…}
(){…}
}
{
;
;
;
;
;
;
;
;
;
;
(){…}
(){…}
}
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
}
四、界面设计
1、规则配置界面
2、
3、导入数据界面
4、
5、
五、导入逻辑
关于操作,设计将采用的组件,版本采用项目中已经包含的版本2.5.1。
具体导入逻辑如下:
1、将文件上传到服务器,利用加载文件。
2、根据用户选择的导入规则,从数据库加载对应的对象;
3、根据标题行索引,数据开始行索引,结束行标识,判断该是否满足对应规则的导入条件,满足则继续,不满足则给出提示信息。
4、从数据开始行开始,逐行读取文件。
5、处理第一列,根据第一列的标题以及属性,匹配到对应的对象,如果没有匹配的对象,则抛出异常(未找到及之匹配的列规则),如果该列已经处理过,也抛出异常(标题存在重复列),否则继续;
6、读取当前列的内容,如果是空值,判断属性是否为,如果是,则将属性作为内容直接执行第11条,如果是则继续;
7、判断属性是否为,如果为,则跳过8、9逻辑,直接执行第10条,如果为,则继续;
8、判断属性、属性、属性以及属性,若其中有任意一个为或空值,则抛出异常(属于字典,却未指定字典表名称以及相关属性、、),否则继续;
9、查找字典表,查找语句为”[][][]=[][]=’[]’”,若语句不能查询到数据,则抛出异常(找不到对应的字典项),若查询到数据,则取第一条数据的[]值,继续;
10、判断属性是否为,若为,执行第11条,若为,则查找表[]中[]值为[]的数据是否存在,若不存在则执行第11条,否则继续判断属性是否为,若为则删除数据库中该条数据;
11、判断属性,并判断及该类型是否匹配,若不匹配,则抛出异常(数据类型不符合条件),如果匹配则继续;
12、判断长度是否超过属性值,若超过,则抛出异常(单元格内容长度太大),否则继续;
13、将作为列的值,加到准备好的语句对应参数位置,等待执行;
14、处理第二列,从第5条开始执行循环处理,直到列结束;
15、执行或批量执行准备好的语句,返回执行结果;
16、处理第二行,并判断是否符合的条件,如果是结束行,则整个导入结束,否则从第4条开始执行循环处理,直到结束。
六、内部评审补充
1、主键生成策略。
考虑到系统中大多设备的主键都及业务有关联,某个设备的主键可能是由网点、设备类别、设备型号等组合出来的,所以各种设备的主键生成规则可能不同,因此设备导入的时候可以根据设备种类,调用不同的主键生成策略。
因此制定导入规则的同时,还要关联相应的主键生成策略。
2、文件的空白行、空白列问题。
经过测试,组件不存在这个问题,例如30行数据,第15行是空白行,依然识别为30行,列同样如此。
3、标题行有名字重复的问题。
名字重复视为同一个属性,直接忽略同时给出警告信息。
4、中止,继续如何实现。
采用的线程实现,()实现暂停,()实现继续。
5、字段引发问题。
逻辑删除的数据字段是0,当中有主键及之重复的数据时,有2中方法:
(1)删除掉原来的数据,重新插入;
(2)直接在原来的数据上更新。
6、读写文件内存。
网上已经查找到行级操作的源码,封装一下,可以满足要求。
7、假删除数据的处理,同5;
8、及时删除垃圾文件,释放对象;
9、注意代码结构和实现;
10、重复逻辑的判断,出现重复数据的处理(根据不同数据,使用相应的判断逻辑,主键判断还是联合主键判断。
逻辑删除的重复数据:
删掉再导入;有效地重复数据:
忽略并给出信息);