简介:如何把 Excel 中的数据移植到关系型数据库中,一直是大家关心的话题,本文提出了一种解决 方案,即使用 Apache POI 按一定的 Excel 文件到 数据库表的映射规则来解析数据,然后使用 JDBC 或 者 Hibernate/JPA 等技术把数据转存到数据库中。
引言
随着企业 IT 系统的不断升级,很多企业有提升遗留系统的强烈需求。而整合遗留系统中的信息资源 是其中最为关键的一步,进而可对信息进行数据挖掘等创新工作。本文涉及这样的一个应用案例,企业的 数据信息是以 Excel 文件作为其附件的方式,分散存储在企业不同的服务器上的,客户要求把这些文件 里面的数据信息转存到数据库中。
读者可能也会遇到其它的应用场景,要求把 Excel 文件中的数据信息解析出来并存入到数据库中。
本文则提供了一种相对高效而智能的解决方案用以解析 excel 文件,并转存入数据库中。
Apache POI (POI-HSSF and POI-XSSF) 简介
POI 是 Apache 基金组织的子项目,POI(Poor Obfuscation Implementation)的目标就是提供一组 Java API 来使得基于 Microsoft OLE 2 Compound Document 格式的 Microsoft Office 文件易于操作。 HSSF(Horrible Spreadsheet Format)是 POI 项目 Excel 文件格式(97 - 2007)的纯 java 实现, 通过 HSSF,开发者可用纯 Java 代码来读取、写入、修改 Excel 文件。而 XSSF 则是 Excel 2007 OOXML(.xlsx) 文件格式的纯 java 实现。
本文主要涉及到应用 HSSF 和 XSSF 读取 Excel 文件中的数据。
Excel 文件到表的映射元数据定义
如何把 Excel 表里面的数据映射为关系数据库表中的数据呢?关系数据库中的二维表是结构化的数据 存储,而一个 Excel 文件的一个 Sheet 页面就可能包含多个可映射为数据库表结构的信息块。这个信息 块可能很简单,也可能非常复杂。在本文中,针对 Excel 中信息块的实际情况,我们定义了几种 Excel 文件到数据库表的映射规则。这些规则就是我们用以解析的元数据。离开了这些元数据,我们就谈不上智 能而高效的解析了。
映射规则一:单元格单一映射
Excel 表中的一个单元格(cell)对应关系数据库中某一个模式(Schema)下一张表(Table)的一个 域(Field)。 如: A1 -> name
映射规则二:单元格组合映射
Excel 表中的多个单元格对应关系数据库中某一个模式(Schema)下一张表(Table)的一个域 (Field)。 组合的方式是字符串的连接,比如 C1,C2, F3 -> address 。可以在映射规则里定义字 符串的分隔符,例如,在上面的例子中是用逗号“,”组合的。