`
isiqi
  • 浏览: 16548014 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多

HSQLDB简介

HSQLDB is the leading SQL relational database engine written in Java.It is best known for its small size, ability to execute completely in memory and its speed

HSQLDB是一个用JAVA写的开源数据库,具有标准的SQL语法支持和JDBC接口,由于它的微型和性从而成为运行测试和演示Demo的最佳选择。我在第一次看到她时甚至高兴地跳了起来。你可以从http://hsqldb.sourceforge.net/免费下载并参阅文档。

您可以从命令行启动数据库服务器和实用工具,具体方法是调用像 org.hsqldb.Server org.hsqldb.util.DatabaseManager 这样的方便的类,这两个类均可以接受为数不多的一组命令行选项,如“-url”(用于远程连接)、“-database”(用于直接文件访问)和“-user”。还有一种“-?”选项也可以被接受,其作用是提供关于有效命令行语法的帮助。

造成 HSQLDB 简单性的关键因素是SQL语句执行的顺序化。也就是说,尽管许多并发用户可以连接到数据库上(当数据库以服务器模式运行时),但是所有 SQL 语句都被放到一个队列中,然后一次执行一条。因此不需要实现复杂的锁定及同步算法。

² HSQLDB的执行方式:

1. 内存驻留模式(all in Memory-Only

所谓全内存访问模式,就是所有的数据(包括索引和记录)都保存在内存里,数据不会持久化。这意味着数据库的大小是受到内存大小的限制的(不能超过内存的大小)。通过在建立JDBC连接时提供jdbc:hsqldb:.URL来进入这种执行模式。需要注意的是:in-memory方式只能运行在一个connection之中,每当关闭一个connection,数据都会丢失.如果同时执行两个操作数据库的方法(每一个方法之中都会有打开/取得和关闭/返回connection),例如:

Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

public void testCreateAndDrop() {

export.create(systemIds);

export.drop(systemIds);

}

而在createdrop方法中,都会有:

public void execute(String sql) {

openConnection();

execute(sql);

closeConnection();

}

在这种情况下,当程序取得connection,在数据库中创建table,然后返回connection,这时刚才数据库中的数据就会自动丢失.因此,当运行到drop方法时,它就会创建新的数据库,此时create方法中创建的table已经不存在了.所以这种方式一般多用于无状态测试中。

2. 单机模式(In-Process (Standalone) Mode

应用程序使用 JDBC 创建一个数据库连接,并且 HSQLDB引擎作为该应用程序的一部分与其运行在同一JVM进程中。在这个模式下,不能存在并发用户(应用程序独占地访问数据库文件,数据库文件被加锁),同一时间一个数据库只能有一个应用程序访问。这意味这在程序运行期间无法运行数据库管理工具进行管理。

这种模式下的JDBCURL如下:jdbc:hsqldb:zzq这里,test是数据库文件名。另一个例子(WINDOWS系统下):jdbc:hsqldb:c:\db\zzq

在这种模式下,数据库引擎在第一次连接建立时启动。如果指定的文件不存在,则在当前目录建立3个文件:zzq.propertyzzq.lckzzq.log。你可以在建立连接时指定ifexists=true来阻止数据库自动建立不存在的数据库,这样在getConnection()时会抛出异常。当数据库关闭时,将所有sql语句写入文件zzq.script中,并删除zzq.lck。下次数据库启动时通过zzq.script在内存重建数据库。

3. 服务器模式

这是类似于其他关系数据库的标准客户机/服务器数据库配置,允许出现使用 TCP 套接字的并发连接。大部分开发人员喜欢这种模式,因为它允许任何 JDBC 客户机在主应用程序仍在运行的情况下连接并查询/更新表。

可以以如下的方式启动数据库zzq
java -cp ../lib/hsqldb.jar org.hsqldb.Server –database zzq
可用参数如下表:

+----------------+------------+----------+------------------------------+

| OPTION | TYPE | DEFAULT | DESCRIPTION |

+----------------+------------+----------+------------------------------|

| -? | -- | -- | prints this message |

| -address | name | any | server inet address |

| -port | number | 9001/544 | port at which server listens |

| -database | path | test | name of the database |

| -silent | true|false | true | false => display all queries |

| -trace | true|false | false | display JDBC trace messages |

| -tls | true|false>| false | TLS/SSL (secure) sockets |

| -no_system_exit| true|false | false | do not issue System.exit() |

+----------------+------------+----------+------------------------------+

连接方式:

 Connection c = DriverManager.getConnection(
 "jdbc:hsqldb:hsql://localhost/xdb", "sa", "");

4. Web服务器模式和servlet模式

HSQLDB 可以以 Web 服务器的形式启动,它允JDBC驱动通过 HTTP 执行SQL 语句;也可以以标准的 servlet 来运行。这种模式主要用于需要穿透防火墙的情况下。从1.7.2开始支持事务。

要以web服务器模式启动数据库,请执行下面语句:

Java org.hsqldb.WebServer –database zzq

其他可用参数见下表:

+----------------+------------+------------+------------------------------+

| OPTION | TYPE | DEFAULT | DESCRIPTION |

+----------------+------------+------------+------------------------------|

| -? | -- | -- | prints this message |

| -address | name | any | server inet address |

| -port | number | 80/443 | port at which server listens |

| -database | name | test | name of the database |

| -root | path | ./ | path to web root |

| -default_page | file | index.html | default web page |

| -silent | true|false | true | false => display all queries |

| -trace | true|false | false | display JDBC trace messages |

| -tls | true|false | | HTTPS (secure) sockets |

| -no_system_exit| true|false | false | do not issue System.exit() |

+----------------+------------+------------+------------------------------+

Servlet的启动其实是由web服务器启动的,具体需要这样配置:参见hsqlServlet.java中的说明,这种方式只实用于单一数据库。

连接方式:

 Connection c = DriverManager.getConnection(
 "jdbc:hsqldb:hsql://localhost/xdb", "sa", "");

5. 几种使用模式的总结

在具体的应用中,一般all in memory主要用于测试。单机模式往往和普通服务器模式相结合,程序开发时使用server模式,在真正部署时再使用单机模式。

6. 数据库建立

当数据库启动时,或者在单机模式中的连接建立时,默认的行为是:如果指定的数据库不存在就建立一个空的。

7. 数据库关闭

在所有的模式下都可以永SHUTDOWN名令来关闭,原来在单机模式下当最后一个连接关闭时数据库自动关闭,在1.7.2版本中必须显式的调用SHUTDOWN才行!当调用此命令的时候所有活动的事务都会回滚。稍有区别的是SHUTDOWN COMPACT命令:A special form of closing the database is via the SHUTDOWN COMPACT command. This command rewrites the .data file that contains the information stored in CACHED tables and compacts it to size. This command should be issued periodically, especially when lots of inserts, updates or deletes are performed on the cached tables. Changes to the structure of the database, such as dropping or modifying tables or indexes also create large amounts of unused space that can be reclaimed using this command.

² HSQLDB 数据库存储结构:

HSQLDB 将所有表和索引数据放在内存中, 将所有发出的 SQL 语句保存到一个名为 database.script 的文件中,该文件同时也充当着事务日志的角色。初始化引擎之后,该文件被读取,然后其中所有的 SQL 语句都被运行,从而完成整个数据库的重建。停机期间,HSQLDB 引擎将生成一个新的 database.script 文件,其中只包含最少的语句,目的是让数据库可以快速启动。

除了默认放在内存中的表之外,HSQLDB 还支持“缓存”表和“文本”表。所有缓存表的数据放在一个名为 database.data 的文件中,而文本表的数据则放在由 set table source 非标准 SQL 语句命名的任意分隔文本文件(像 CSV 文件)中。缓存表支持比可用 RAM 大的数据集,而文本表则可以作为一种导入导出数据的方便手段。

除了 database.script database.data 文件之外,任何 HSQLDB 数据库还可能包含一个 database.properties 文件,管理员可以在该文件中设置许多影响到 ANSI SQL 兼容性的参数。所有数据库文件(文本表数据文件除外)必须放在同一个目录中。

不存在创建 HSQLDB 数据库的显式方法。如果您要求引擎打开一个目前不存在的数据库文件(使用服务器模式的 -database 选项或单机模式的 JDBC URL),就会创建该文件及其所在目录。所以,如果您肯定那个空数据库中存在数据,请检查是否有录入错误。

可以看出HSQLDB对于单元测试非常有利:使用hsqldb,速度非常快,而且当使用in-memory方式来测试单一方法时,完全不要考虑完整性,不一致性等问题.每当connection断开后,数据会自动清除。

分享到:
评论

相关推荐

    hsqldb使用(转载)

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

    HSQLDB中文帮助文档

    ### HSQLDB中文帮助文档知识点总结 #### 一、HSQLDB概述 - **定义**:HSQLDB(HyperSQL Database)是一款轻量级、开源的纯Java SQL数据库管理系统。它能够作为嵌入式数据库使用,也可以作为一个独立的服务器运行。 ...

    hsqldb-2.2.8数据库

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

    HSQLDB快速连接数据库

    ### HSQLDB快速连接数据库 #### 一、HSQLDB简介与特点 HSQLDB(HyperSQL Database)是一款优秀的轻量级开源纯Java SQL数据库管理系统。它被设计为易于集成到现有的Java应用环境中,尤其适合那些对性能和资源消耗有...

    hsqldb的最新版本

    HSQldb,全称HyperSQL Database,是一款开源的、轻量级的关系型数据库管理系统,尤其适合于嵌入式应用和开发测试环境。HSQldb完全用Java编写,因此具有跨平台性,能在任何支持Java的环境中运行,包括Windows操作系统...

    hsqldb-2.5.0.jar

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

    hsqldb-lib.zip

    《HSQldb与Java数据库连接详解》 HSQldb(HyperSQL Database)是一款开源、轻量级、嵌入式的关系型数据库管理系统,广泛应用于Java应用程序中。它支持SQL标准,提供单用户和多用户模式,并且可以运行在内存中或磁盘...

    hsqldb包和使用说明

    HSQldb是一个开源的、轻量级的、嵌入式的Java数据库引擎,常用于开发测试环境和小型应用程序。它的全称是HyperSQL Database,能够支持SQL标准,包括SQL:2011。HSQldb因其小巧、快速和易用的特点,在Java开发中尤其受...

    hsqldb-2.3.3.zip

    《HSQldb 2.3.3:轻量级数据库引擎深度解析》 HSQldb,全称为HyperSQL Database,是一款开源、纯Java语言编写的轻量级关系型数据库管理系统,广泛应用于测试环境、嵌入式系统以及小型应用中。HSQldb 2.3.3是其稳定...

    hsqldb实例源代码

    HSQldb是一个开源的、轻量级的关系型数据库管理系统,主要设计用于嵌入式环境,同时也支持服务器模式。它实现了SQL标准,支持多种数据库功能,包括事务处理、存储过程、触发器和视图等。本实例源代码将帮助我们深入...

    hsqldb相关几个文件

    标题 "hsqldb相关几个文件" 提到的是与HSQldb相关的压缩包资源,HSQldb是一个开源的关系型数据库管理系统,特别适用于Java应用程序。描述中提及的有两个zip文件:hsqldb_1_8_0_10.zip 和 hsqldb-mini.zip,以及一个...

    hsqldb-2.3.2.zip

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

    Hsqldb的缓存分析及调试步骤

    HSQLDB(HyperSQL Database)是一个轻量级、高性能的关系型数据库引擎,常用于Java应用程序和测试环境中。它的缓存机制和数据存储方式对于理解其性能和操作至关重要。以下是对HSQLDB的缓存分析和调试步骤的详细解释...

    开源数据库软件hsqldb

    《开源数据库软件HSQldb深度解析》 HSQldb,全称HyperSQL Database,是一款完全开源、免费的Java实现的关系型数据库管理系统(RDBMS),它支持多种运行环境,包括独立服务器模式、嵌入式模式以及Web应用。HSQldb因...

    <转>HSQLDB 安装与使用

    HSQLDB,全称 HyperSQL Database,是一款轻量级、高性能、开源的Java关系型数据库管理系统。它在Java环境中运行,适用于开发嵌入式数据库应用、测试环境以及作为服务器模式的数据库系统。HSQLDB因其小巧、快速和易用...

    HSQLDB中文文档 第六章 Text表

    ### HSQLDB中文文档第六章 Text表解析 #### 一、概述 HSQLDB (HyperSQL Database) 是一款高性能的开源轻量级关系型数据库管理系统,适用于开发测试环境及小型应用系统。Text表是HSQLDB的一个特色功能,主要用于...

Global site tag (gtag.js) - Google Analytics