`
stevezheng
  • 浏览: 80529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给HSQLDB的text table增加对Excel的读取

    博客分类:
  • java
阅读更多

HSQLDB是一个非常好的内存数据库,对于处理少量数据的小型数据应用非常适合。

其中,text table更是扩展了数据存储的方式,它可以将一个csv文件挂接进来,进而,对这个表的全部操作都将在这个csv文件中体现出来。但是,他不支持excel作为数据源。

我增加了这个功能。思路如下:

如果我们想要挂接一个csv,那么需要写:

 

SET TABLE table_1 SOURCE "data.csv;encoding=GB2312;"
 

表示把data.csv挂在table_1上了,这样,select, insert, update都会时时体现在这个csv上,顺着这个思路,我的目标是通过:

SET TABLE table_1 SOURCE "data.xls;encoding=GB2312"

定义一个xls文件,如果系统也能够处理,多好!

 

设想是:如果能在系统真正处理之前,检测一下,如果判断是xls,那么就是用POI将其转化为csv文件,然后使用这个csv文件拼接上去。

 

最终找到,在org.hsqldb.persist.TextCache里面处理这些事情,于是在:

protected void initParams(Database database,String baseFileName) throws HsqlException {

 里面增加了一段代码,

               if(fileName.endsWith(ExcelToCsv.EXT_XLS)) {
                	try {
						ExcelToCsv etc = new ExcelToCsv(fileName,tableprops.getProperty(ExcelToCsv.ROW_COUNT),tableprops.getProperty(ExcelToCsv.COL_COUNT));
						fileName = etc.parse();
					} catch (IOException e) {
						// TODO error handling
						e.printStackTrace();
					}
                }

 其中,ExcelToCsv是我新增的一个类,用于读取Excel将其写成csv。

 

在实际使用中,需要提供Excel文件中有多少列,和多少行(对于多少行,如果事先无法确定,可以给一个足够大的数),也就是说,在实际使用中,用:

SET TABLE table_1 SOURCE "data.xls;encoding=GB2312;rowcount=200;colcount=11"

其中,定义了,table_1这个表从Excel里面取11列,最多取200行(实际Excel文件里面只有157行)。

 

 

附件是基于HSQLDB1.8.0.10版本增加这个功能的jar以及相关原代码。

 

缺陷如下:

1、基于上面的机制,只在set的时候处理一次,那么,以后对于table_1的任何操作都不会反映在excel文件里面,而只会在csv里面,不过我的客户都是只有select,而不会update, delete,所以这个功能对我用处不大;

2、一些exception的处理没有写完善;

 

 

 

哪位老大有时间,完善一把呗

  • excel_datasource.zip (20.7 KB)
  • 描述: 原代码和测试,我已经以Patch方式提交了原代码给HSQLDB opensource,去那里down也可以。
  • 下载次数: 21
  • hsqldb.jar (697.3 KB)
  • 描述: 增加了这个功能的jar
  • 下载次数: 5
3
0
分享到:
评论

相关推荐

    HSQLDB中文文档 第六章 Text表

    通过对Text表特性的深入了解和应用,可以极大地提高数据处理效率和灵活性,尤其是在需要频繁读取外部数据文件的应用场景中。 总之,HSQLDB中的Text表功能是一个强大的工具,它不仅增强了HSQLDB处理文本文件的能力,...

    Hsqldb的缓存分析及调试步骤

    **Text Table**:文本表的读取速度较慢,因为需要从磁盘读取文件,但数据是持久化的。 C. **Cached Table**:缓存表在内存和磁盘之间进行平衡,初次读取时可能较慢,但后续访问会更快,因为数据会被缓存。 在调试...

    hsqldb使用(转载)

    HSQldb是一个轻量级的关系型数据库管理系统,特别适合用于系统演示、开发和测试环境。它的特点是快速、灵活且易于使用。HSQldb支持多种运行模式,满足不同场景的需求。 1. **数据库实例创建** 创建HSQldb数据库...

    HSQLDB

    - **轻量级**:HSQLDB具有小巧的体积,对硬件资源需求低,适合于内存数据库和嵌入式环境。 - **高性能**:HSQLDB设计精良,查询速度快,尤其在处理大量数据时表现出良好的性能。 - **SQL兼容性**:HSQLDB高度遵循SQL...

    HSQLDB快速连接数据库

    2. **SQL问题**:探讨了HSQLDB对SQL标准的支持程度,包括对各种SQL语句(如SELECT、UPDATE等)的解释和示例,以及如何使用HSQLDB来管理数据完整性约束。 3. **UNIX下快速起步**:提供了一套适用于UNIX系统的快速入门...

    HSQLDB中文帮助文档

    - **对SQL标准的支持**:HSQLDB遵循并扩展了SQL标准,支持复杂的查询语法。 - **约束和索引**: - **主键**:定义主键时,系统会自动创建一个唯一的索引。 - **唯一性索引**:可以手工创建,提高查询性能。 - **...

    hsqldb的最新版本

    2. **增强的SQL支持**:HSQldb致力于遵循SQL标准,1.9.0版本可能增加了对更多SQL92和SQL99标准的支持,比如窗口函数、子查询优化等,这将使开发者能够编写更复杂的查询语句。 3. **安全性改进**:新的版本可能提升...

    hsqldb 2.25

    HSQldb因其小巧、高效以及对Java应用的良好支持,常被用于开发、测试和部署阶段,尤其是对于那些对数据存储需求不高但又需快速启动的项目。 在本压缩包中,提供的HSQldb版本为2.25,特别之处在于它是针对JDK 1.5...

    hsqldb demo

    **HSQldb 概述** HSQldb,全称 HyperSQL Database,是一个开源、轻量级、完全Java编写的数据库管理系统。它支持多种数据库模式,包括纯内存储存、文件系统存储以及网络服务器模式,使其在多种场景下都能发挥效用。...

    hsqldb-2.3.2.zip

    HyperSQL是用Java编写的一款SQL关系数据库引擎 它的核心完全是多线程的 支持双向锁和MVCC 多版本并发控制 几乎完整支持ANSI 92 SQL 支持常见数据类型 最新版本增加了对BLOB和CLOB数据的支持 最高支持达64T的数据量 ...

    HSQLDB 1.8.0

    3. **新的SQL功能**:增加了对更多SQL标准的支持,如窗口函数、子查询改进等,增强了数据库的灵活性和表达能力。 4. **增强的并发控制**:改进了多用户环境下的并发性能,保证了数据的一致性。 三、使用HSQLDB的...

    开源数据库软件hsqldb

    3. **创建表**:通过SQL语句`CREATE TABLE`定义表结构,如`CREATE TABLE Users (id INT PRIMARY KEY, name VARCHAR(50))`。 4. **插入数据**:使用`INSERT INTO`语句插入数据,如`INSERT INTO Users VALUES (1, '...

    hsqldb-2.2.8数据库

    **HSQldb 2.2.8 数据库详解** HSQldb(HyperSQL Database)是一款高效、轻量级且开源的Java数据库管理系统,它在IT领域中被广泛应用于开发、测试以及小型应用环境。HSQldb完全用Java编写,因此具有良好的跨平台性,...

    hsqldb-2.5.0.jar

    hsqldb数据库下载,很好用,简易的内存数据库,特别适合初学者。

Global site tag (gtag.js) - Google Analytics