大数据Excel通过POI导入数据库通用设计方案.doc

上传人:laozhun 文档编号:2395323 上传时间:2023-02-17 格式:DOC 页数:10 大小:137.50KB
返回 下载 相关 举报
大数据Excel通过POI导入数据库通用设计方案.doc_第1页
第1页 / 共10页
大数据Excel通过POI导入数据库通用设计方案.doc_第2页
第2页 / 共10页
大数据Excel通过POI导入数据库通用设计方案.doc_第3页
第3页 / 共10页
大数据Excel通过POI导入数据库通用设计方案.doc_第4页
第4页 / 共10页
大数据Excel通过POI导入数据库通用设计方案.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《大数据Excel通过POI导入数据库通用设计方案.doc》由会员分享,可在线阅读,更多相关《大数据Excel通过POI导入数据库通用设计方案.doc(10页珍藏版)》请在三一办公上搜索。

1、目录一、总体设计思路- 1 -二、导入规则表设计- 1 -1、数据导入表规则- 1 -2、数据导入列规则- 1 -三、导入规则类设计- 3 -四、界面设计- 4 -1、规则配置界面- 4 -2、导入数据界面- 6 -五、导入逻辑- 7 -六、内部评审补充- 7 -七、设备依赖关系- 8 -设备信息Excel导入设计方案一、 总体设计思路考虑到Excel导入在项目中应用较多,随后其他项目中都会用到,为了减少重复工作,不必因为excel的样式、数据等变化而重新编码,重复劳动,因此必须抽取通用的东西出来,封装共同点,暴露个性点,使用时只需要关注相关业务,而不必关注excel的读取和存储。考虑到这个情

2、况,可以使用规则配置来解决这个问题。配置规则的时候,需要配置excel要导入的表,字段等信息,导入的时候依据这个规则将数据导入到数据库中。这样一来,在进行excel导入时候只需要为某种数据配置一个规则,然后调用封装的导入类就可以完成整个excel导入的工作了。二、 导入规则表设计1、 数据导入表规则data_import_table_rule字段名字段类型允许null值默认值备注主键IDVarchar2(32)否唯一标识,uuid是Create_timedate否sysdate创建时间Rule_nameVarchar2(32)否规则名称End_rowVarchar2(16)否blank_row

3、结束行,空行或第N行Header_indexint否1标题行索引Data_indexint否2数据行索引Table_nameVarchar2(32)否表名称Delete_repeatint否0是否删除重复行0不删除1删除Enableint否1有效标识,删除标识Blank1Varchar2(256)是扩展字段1Blank2Varchar2(256)是扩展字段2Blank3Varchar2(256)是扩展字段3Blank4Varchar2(256)是扩展字段4Blank5Varchar2(256)是扩展字段5(1) ID:数据表唯一标识,没有业务含义;(2) Create_time:创建时间;(3

4、) Rule_name:规则名称;(4) End_row:数据读取结束标识,blank_row标识遇到空行结束,数字N表示读取到第N行结束;(5) Header_index:excel标题行索引,默认值为1,表示第一行是标题行;(6) Data_index:数据开始行索引,默认值为2,表示第2行开始是正式数据;(7) Table_name:表名称,表示这个规则是针对这个表的数据导入定义的;(8) Delete_repeat:是否删除重复行,即是否导入重复数据,0则不删除,直接导入,1则先删除重复数据,然后再导入;是否重复根据规则表data_import_column_rule的Is_uniqu

5、e字段来判定,重复行是指数据库中存在与excel中相同的数据;(9) Enable:有效标识;2、 数据导入列规则 data_import _column_rule字段名字段类型允许null值默认值备注主键IDVarchar2(32)否唯一标识,uuid是Table_rule_idVarchar2(32)否data_import_table_rule表的主键Is_PKint否0是否是主键Produce_methodVarchar2(32)否生成方法,导入数据/自定义策略/默认值Is_uniqueint否0是否唯一,用来判定重复数据Column_nameVarchar2(32)否列名称Heade

6、r_nameVarchar2(32)否对应excel列头Requiredint否1是否必须填入0不必须1必须Data_typeVarchar2(16)否string数据类型,string /number /dateMax_lengthint否0允许最大存储长度,字节Produce_method_valueVarchar2(32)是生成方法值,策略方法名/默认值CommentVarchar2(128)是备注Is_dictionaryint否0是否属于字典0不属于1属于Dic_table_nameVarchar2(32)是字典表名称Dic_type_columnVarchar2(32)是字典类型字

7、段名Dic_type_valueVarchar2(32)是字典类型Dic_required_columnVarchar2(32)是字典表最终获取值列的名称Dic_reference_columnVarchar2(32)是字典表参考列的名称Enableint否1是否有效Blank1Varchar2(256)是扩展字段1Blank2Varchar2(256)是扩展字段2Blank3Varchar2(256)是扩展字段3Blank4Varchar2(256)是扩展字段4Blank5Varchar2(256)是扩展字段5(1) ID:数据表唯一标识,没有业务含义;(2) Table_rule_id:d

8、ata_import_table_rule表的主键,表示这条列规则是属于哪个表的规则;(3) Is_PK:是否是主键;(4) Produce_method:数据生成策略,导入数据/自定义策略/默认值,三种策略供选择;(5) Is_unique:是否唯一,用来判定重复数据;(6) Column_name:列名称,对应表中的列名;(7) Header_name:excel列标题,与数据表列是对应的;(8) Required:是否必须导入,0不必须1必须;(9) Data_type:数据类型,数字还是字符,number/string/date;(10) Max_length:最大允许长度,不能大于,

9、数据表中该列的长度;(11) Produce_method_value:数据生成策略值,导入数据是为空,自定义策略是为策略方法名,或者是默认值;(12) Comment:备注;(13) Is_dictionary:最终导入数据是否来源于字典,0不1是;(14) Dic_table_name:字典数据来源表的名称;(15) Dic_type_column:字典类型列的字段名;(16) Dic_type_value:该列所属的字典类型值;(17) Dic_required_column:字典表最终获取值列的名称,例如:现在需要导入“编码器类型”,excel内容是“飞利浦”,“编码器类型”是一个字典

10、,对应的字典表是“video_coding_type”,“飞利浦”是“video_coding_type_name”列的值,而数据表需要存入的是“video_coding_type_id”列的值,这时“video_coding_type_id”就是Dic_required_column,而“video_coding_type_name”就是Dic_reference_column,“video_coding_type”是Dic_table_name;(18) Dic_reference_column:参见第17条说明。(19) Enable:该规则是否有效;三、 导入规则类设计class Im

11、portResult private int success;/成功数目private int failed;/失败数目 class Excel private DataImportTableRule tableRule;public Excel(String path)public ImportResult import()class DataImportTableRule private String id;private Date createTime;private String ruleName;private String endRow;private int headerInde

12、x;private int dataIndex;private String tableName;private boolean deleteRepeat;private String exceptColumns;private Set ColumnRules;public void initColumnRules()public void addColumnRule(DataImportColumnRule columnRule)class DataImportColumnRule private String id;private String tableRuleId;private bo

13、olean isUnique;private String columnName;private String headerName;private boolean required;private String dataType;private String maxLength;private String defaultValue;private String comment;private boolean isDictionary;private String dicTableName;private String dicTypeColumn;private String dicType

14、Value; private String dicRequiredColumn;private String dicReferenceColumn;四、 界面设计1、 规则配置界面取 消保 存是/否21blank_row新建表规则规则名称 例如:视频编码器规则结束行 blank_row表示遇空行结束,也可输入行索引标题行索引 标题通常在第1行,也可输入行索引数据开始行 数据通常从第2行开始,也可输入行索引表名 要导入的数据表是否删除重复行新建删除修改当前位置:数据导入规则表规则规则名称表名创建时间列规则摄像机导入规则添加 / 查看 共23条 共3页 当前第3页 转到第页添加列规则摄像机导入规则

15、是/否是/否String/number是/否保 存取 消所属表规则 readonly列名 对应的columnName是否唯一 用于判定是否重复数据Excel标题 对应excel列的标题名称不能为空数据类型默认值 excel对应列为空是填充此数据来源于字典字典表名称 最终数据来源表名数据列名称 最终来源列名字典参照列 参照列名,匹配到数据列2、 导入数据界面是/否取 消下一步下拉列表(规则列表)浏览D:城市监控与报警联网视频编码器.xls导入数据,第1步选择Excel文件应用导入规则是否显示导入过程 影响导入速度下载文件模板 视频编码器.xls注:excel文件不能大于20M 进度条忽略第1行,

16、标题行。导入第2行,成功。导入第3行,失败,原因:字典表dic_table符合条件typename=三星的数据不存在。导入第4行,成功。取 消暂 停导入数据,第2步正在导入数据,请稍后继续导入完 成导入数据,结束执行完毕,导入成功32,失败3。详细日志输出在以下路径:http:/localhost:8080/bank/importLog/import_201109231001.log 五、 导入逻辑关于Excel操作,设计将采用apache的poi组件,版本采用项目lib中已经包含的版本poi-2.5.1。具体导入逻辑如下:1、 将excel文件上传到web服务器,利用poi加载excel文件

17、。2、 根据用户选择的导入规则,从数据库加载对应的DataImportTableRule对象;3、 根据标题行索引Header_index,数据开始行索引Data_index,结束行标识End_row,判断该excel是否满足对应规则的导入条件,满足则继续,不满足则给出提示信息。4、 从数据开始行Data_index开始,逐行读取excel文件。5、 处理excel第一列,根据excel第一列的标题以及header_name属性,匹配到对应的DataImportColumnRule对象,如果没有匹配的对象,则抛出异常(未找到与之匹配的列规则),如果该列已经处理过,也抛出异常(excel标题存在

18、重复列),否则继续;6、 读取Excel当前列的内容text,如果text是空值,判断Required属性是否为true,如果是false,则将defaultValue属性作为excel内容text直接执行第11条,如果是true则继续;7、 判断Is_dictionary属性是否为true,如果为false,则跳过8、9逻辑,直接执行第10条,如果为true,则继续;8、 判断Dic_table_name属性、Dic_type属性、Dic_required_column属性以及Dic_reference_column属性,若其中有任意一个为null或空值,则抛出异常(属于字典,却未指定字典表

19、名称Dic_table_name以及相关属性Dic_type、Dic_required_column、Dic_reference_column),否则继续;9、 查找字典表,查找语句为”select Dic_required_column from Dic_table_name where Dic_type_column=Dic_type_value and Dic_ Reference_column=text”,若sql语句不能查询到数据,则抛出异常(找不到对应的字典项),若查询到数据,则取第一条数据的Dic_required_column值,继续;10、 判断Is_unique属性是否为t

20、rue,若为false,执行第11条,若为true,则查找表Table_name中Column_name值为text的数据是否存在,若不存在则执行第11条,否则继续判断Delete_repeat属性是否为true,若为true则删除数据库中该条数据;11、 判断Data_type属性,并判断text与该类型是否匹配,若不匹配,则抛出异常(数据类型不符合条件),如果匹配则继续;12、 判断text长度是否超过Max_length属性值,若超过,则抛出异常(单元格内容长度太大),否则继续;13、 将text作为Column_name列的值,加到准备好的sql语句对应参数位置,等待执行;14、 处理

21、excel第二列,从第5条开始执行循环处理,直到Excel列结束;15、 执行或批量执行准备好的sql语句,返回执行结果;16、 处理excel第二行,并判断是否符合End_row的条件,如果是结束行,则整个导入结束,否则从第4条开始执行循环处理,直到End_row结束。六、 内部评审补充1、 主键生成策略。考虑到系统中大多设备的主键都与业务有关联,某个设备的主键可能是由网点、设备类别、设备型号等组合出来的,所以各种设备的主键生成规则可能不同,因此设备导入的时候可以根据设备种类,调用不同的主键生成策略。因此制定导入规则的同时,还要关联相应的主键生成策略。2、 Excel文件的空白行、空白列问题

22、。经过测试,poi组件不存在这个问题,例如30行数据,第15行是空白行,poi依然识别为30行,列同样如此。3、 Excel标题行有名字重复的问题。名字重复视为同一个属性,直接忽略同时给出警告信息。4、 中止,继续如何实现。采用java的线程实现,wait()实现暂停,notify()实现继续。5、 Enable字段引发问题。逻辑删除的数据enable字段是0,当excel中有主键与之重复的数据时,有2中方法:(1)删除掉原来的数据,重新插入;(2)直接在原来的数据上更新。6、 读写文件内存。网上已经查找到poi行级操作的源码,封装一下,可以满足要求。7、 假删除数据的处理,同5;8、 及时删

23、除垃圾文件,释放对象;9、 注意代码结构和实现;10、 重复逻辑的判断,出现重复数据的处理(根据不同数据,使用相应的判断逻辑,主键判断还是联合主键判断。逻辑删除的重复数据:删掉再导入;有效地重复数据:忽略并给出信息);七、 设备依赖关系系统中的各种设备彼此之间存在依赖关系,就是说一个设备数据要导入的时候,有一个前提,即它依赖设备的数据必须已经存在(例如:一台摄像机属于某个网点,要导入摄像机信息必须保证这个网点数据已经存在。例如:一台摄像机需要接入一个视频编码器,那么只有这个视频编码器数据已经存在,才能导入这台摄像机的数据),那么这些数据导入就存在一定的优先级关系 ,初步梳理数据优先级关系如下(

24、1为最高优先级,2其次,依次类推):1. 网点(TableName: net_node_info)2. 设备管理服务器(TableName: platform_server_info),依赖数据13. 集中存储服务器(TableName: platform_server_info)4. 视频编码器(TableName: pre_server_info),依赖数据1,25. 视频解码器(TableName: pre_server_info),依赖数据16. 摄像机(TableName: camera_info),依赖数据1,3,47. 开关量电器(TableName: switch_electrical_equ_info),依赖数据1,48. 报警探测器(TableName: alarm_detector_info),依赖数据4,69. 对讲点(TableName: intercom_node_info),依赖数据4,610. 电视墙设备(TableName: tv_wall_info)11. 模拟矩阵(TableName: matrix_info)参照以上依赖关系,设备导入的时候按顺序导入,可减少导入数据出错。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号