`
isiqi
  • 浏览: 16058402 次
  • 性别: 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-2.3.2.zip

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

    hsqldb实例源代码

    简单的创建两个例子,如何创建hsqldb,如何使用hsqldb查询数据等。

    hsqldb jdbc driver

    hsqldb jdbc driver适合于hsqldb

    hsqldb-2.5.0.jar

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

    hsqldb的最新版本

    hsqldb的最新1.9.0版本,支持windows操作系统

    HSQLDB快速连接数据库

    HSQLDB中文文档,能够提高数据的处理速度。

    hsqldb-1.7.1.jar

    数据库连接 hsqldb1.7.1.jar

    hsqldb-2.2.8数据库

    Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速。

    hsqldb-lib.zip

    hsqldb可能需要的额外jar包 Additional Jar files needed for hsqldb.

    hsqldb-2.5.0.zip

    开源数据库hsqldb最新版本2.5.0,含源代码及bin文件 Open-sourced database hsqldb2.5.0, including source code and bin file(stuctured in form of .BAT)

    hsqldb source code and doc

    hsqldb source code and document, it is the version 2.0 rc3. sqldb是一个非常著名的数据库,支持嵌入和client-server方式,支持内存模式,cached, text 3种表。 欢迎更多人研究这种优秀的开源数据库

    hsqldb相关几个文件

    里面有hsqldb_1_8_0_10.zip 还有个hsqldb-mini.zip 包括一个hsqldb学习文档

    Hsqldb安装与使用

    HSQLDB的安装,使用,以及简单的例子讲解

    hsqldb-2.4.0.zip

    hsqldb-2.4.0

    hsqldb-1.8.0.7.jar

    HSQLDB(HyperSQL DataBase)是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的

    hsqldb-2.2.9.zip

    HSQLDB 2.2.9 发布了 Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,进程内模式(In-Process)和内存模式(Memory-Only)三种。运行...

    hsqldb-2.3.3.zip

    hsqldb-2.3.3.zip,官方的。

    Hsqldb的缓存分析及调试步骤

    对hsqldb的缓存和表格建立,数据存储机制以及使用eclipse的调试步骤做了详尽的分析,有截图辅助

    hsqldb-1.8.0.10.jar

    hsqldb-1.8.0.10.jar

Global site tag (gtag.js) - Google Analytics