HSQL 数据库介绍(1)--简介

打印 上一主题 下一主题

主题 925|帖子 925|积分 2779

HSQLDB(HyperSQL Database)是一款用 Java 编写的关系数据库管理系统;它提供了许多功能,并严格遵循最新的 SQL 和 JDBC 4.2 标准;本文紧张介绍其基本概念及安装。
1、简介

HyperSQL Database(HSQLDB)是一款现代的关系数据库系统。HSQLDB 遵循国际 ISO SQL:2016 标准,支持完备的经典功能集,以及可选功能,如存储过程和触发器。
HyperSQL 2.7 版本兼容 Java 11 或更高版本,下载的 zip 包中还包含了使用 JDK 8 编译的版本。在 hsqldb.org 官网上还提供了使用 JDK 6 编译的版本。
SQL 标准兼容性是 HyperSQL 最独特的特点。还有一些其他显著特性。HyperSQL 可以在用户的应用程序进程内或作为单独的服务器进程内提供数据库访问。HyperSQL 可以完全在内存中运行,使用快速的内存结构。HyperSQL 可以以灵活的方式使用磁盘长期化,具有可靠的瓦解规复功能。HyperSQL 是唯一一个具有高性能专用 LOB 存储系统的开源关系数据库管理系统,实用于 GB 级的 LOB 数据。它也是唯一一个可以创建和访问大型逗号分隔文件作为 SQL 表的关系数据库。HyperSQL 支持三种可切换的及时势件控制模型,包括完全多线程的 MVCC,并实用于高性能事件处理应用程序。HyperSQL 还实用于商业智能、ETL 和其他处理大数据集的应用程序。HyperSQL 具有各种企业摆设选项,如 XA 事件、连接池数据源和远程身份验证。
HyperSQL 新增了 SQL 语法兼容模式。这些模式答应与使用非标准 SQL 语法的其他数据库系统高度兼容。
2、HSQL jar 文件说明

 HSQLDB jar 包(hsqldb.jar)位于 ZIP 包的 lib 目录中,包含多个组件和程序:

  • HyperSQL RDBMS Engine(HSQLDB)
  • HyperSQL JDBC Driver
  • DatabaseManagerSwing GUI 数据库访问工具
HyperSQL RDBMS 和 JDBC Driver 提供了核心功能。DatabaseManagerSwing 是一个数据库访问工具,可与任何具有 JDBC 驱动程序的数据库引擎一起使用。
另外还有一个 jar 包,sqltool.jar,其中包含 Sql Tool,这是一个命令行数据库访问工具,也可以用于其他数据库引擎。
3、访问数据库工具

可以通过如下方法启动访问数据库的工具:
  1. java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing #需要使用JDK11,根据实际情况指定jar包位置
复制代码

4、HSQLDB 类型

根据数据存储方式,有三种类型的 HSQLDB:

  • mem:完全存储在 RAM 中,没有长期性,超出 JVM 进程生命周期后数据将丢失。
  • file:存储在文件系统中,以文件的情势生存。
  • res:存储在 Java 资源中,例如 JAR 文件,且始终为只读状态。
mem:数据库可用于测试数据或作为应用程序的高级缓存。这些数据库没有任何文件。
file:数据库由 2 到 6 个文件组成,名称相同但扩展名不同,位于同一目录中。例如,名为"testdb"的数据库由以下文件组成:testdb.properties、testdb.script、testdb.log、testdb.data、testdb.backup、testdb.lobs。properties 文件包含有关数据库的一些设置。script 文件包含表和其他数据库对象的定义,以及内存表的数据。log 文件包含对数据库的近来更改。data 文件包含缓存表的数据,backup 文件用于规复到数据文件的最后已知同等状态。所有这些文件都是必不可少的,不应该被删除。对于某些 catalog,testdb.data 和 testdb.backup 文件可能不存在。除了这些文件外,HyperSQL 数据库还可以链接到磁盘上任何格式化的文本文件,例如 CSV 列表。当 "testdb" catalog 处于打开状态时,会使用 testdb.log 文件记录对数据所做的更改。这个文件会在正常关闭时被删除,否则(异常关闭时),在下一次启动时将使用该文件来重做更改。testdb.lck 文件也被用来记录数据库是否处于打开状态。这个文件会在正常关闭时被删除。
res:数据库包括一个小型的只读数据库文件,可以存储在 Java 资源中,比如 ZIP 或 JAR 文件中,并作为 Java 应用程序的一部分进行分发。
5、连接模式

与 H2 类似,HSQLDB 也支持三种连接模式:
进程内模式(使用 JDBC 进行本地连接)
服务器模式(通过 TCP 或 HTTP 进行远程连接)
混合模式(同时进行本地和远程连接)
5.1、进程内模式

 应用程序使用 JDBC 从同一个 JVM 中打开数据库。根据不同类型的数据库,JDBC 连接 HSQLDB 会有不同的 URL 写法。
A、mem catalog
  1. Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");
复制代码
B、file catalog
  1. Connection c = DriverManager.getConnection("jdbc:hsqldb:file:d:/temp/test", "SA", "");
复制代码
C、res catalog
  1. Connection c = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");
复制代码
5.2、服务器模式

对于大多数应用程序来说,进程内访问速度更快,因为数据不必要转换并通过网络发送。紧张缺点是,默认情况下无法从应用程序外部连接到数据库。因此,在应用程序运行时,无法使用诸如数据库管理器之类的外部工具查询数据库的内容。
服务器模式提供了最大的可访问性。数据库引擎在 JVM 中运行并打开一个或多个进程内数据库。它监听来自同一台计算机或网络上其他计算机的程序的连接。它将这些连接转换为与数据库的进程内连接。
服务器模式也是开发过程中首选的运行数据库的模式。它答应您在应用程序运行时从单独的数据库访问工具中查询数据库。
基于客户端和服务器之间通讯所使用的协议,有三种服务器模式。
5.2.1、HyperSQL HSQL Server

这是运行数据库服务器的首选方式,也是最快的方式。这种模式使用专有的通讯协议。可以通过如下命令启功数据库:
  1. java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:d:/temp/mydb --dbname.0 test #启动file数据库,数据库文件保存在d:/temp目录下,数据名称为 test
  2. java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 mem:mydb --dbname.0 test #启动mem数据库,数据名称为 test
复制代码
使用 JDBC 访问该数据库:
  1. Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/test", "SA", "");
复制代码
5.2.2、HyperSQL HTTP Server

这种访问方法用于数据库服务器只能使用 HTTP 协议的情况。使用此访问方法的唯一缘故因由是客户端或服务器呆板上的防火墙所施加的限制,不应在没有此类限制的情况下使用。HyperSQL HTTP 服务器是一个特殊的 Web 服务器,答应 JDBC 客户端通过 HTTP 连接数据库。可以通过如下命令启功数据库:
  1. java -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 file:d:/temp/mydb --dbname.0 test #启动file数据库,数据库文件保存在d:/temp目录下,数据名称为 test
  2. java -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 mem:mydb --dbname.0 test #启动mem数据库,数据名称为 test
复制代码
使用 JDBC 访问该数据库:
  1. Connection c = DriverManager.getConnection("jdbc:hsqldb:http://localhost/test", "SA", "");
复制代码
5.2.3、HyperSQL HTTP Servlet

这种访问方法也使用 HTTP 协议。它通过 Servlet 引擎(如Tomcat)提供对数据库的访问。这种方式使用较少,这里就不详细介绍,可参考源文件 src/org/hsqldb/server/Servlet.java 查看详细信息。
5.3、混合模式

 可以在应用中通过 Java 代码来启动 HSQLDB 的服务,这样本地和远程就都可以访问数据库了。
  1. HsqlProperties p = new HsqlProperties();
  2. p.setProperty("server.database.0","d:/temp/test");
  3. p.setProperty("server.dbname.0","test");
  4. Server server = new Server();
  5. server.setProperties(p);
  6. server.start();
复制代码
6、关闭数据库

不同模式下运行的所有数据库都可以通过 SQL 语句 "SHUTDOWN" 来关闭。当发出 SHUTDOWN 命令时,所有活动事件都将被回滚。然后,数据库文件将以一种特定的情势生存,以便下次启动数据库时能快速打开这些文件。当通过 JDBC 显式关闭对数据库的最后一个连接时,数据库不会关闭。可以在第连续接数据库时指定连接属性 shutdown=true,以在最后一个连接关闭时强制关闭。
如果是在应用中启动数据库,可以通过编程方式关闭它。调用 org.hsqldb.server.Server的shutdownCatalogs(int shutdownMode)方法会关闭所有打开的数据库,导致服务器关闭。参数值通常为 1,表示正常关闭。还支持其他关闭模式,如 SHUTDOWN IMMEDIATELY。详细可查看 org.hsqldb.server.Server 的 javadoc。
7、创建新数据库

当启动数据库实例或与内部数据库建立连接时,如果给定路径上不存在数据库,则会创建一个新的空数据库。
在 HyperSQL 2.0 中,连接时指定的用户名和暗码将用于新数据库。用户名和暗码都区分大小写(破例是默认的SA用户,不区分大小写)。如果未指定用户名或暗码,则使用默认的SA用户和空暗码。
这个特性有一个副作用,可能会让新用户感到困惑。如果在指定连接到现有数据库的路径时写错了,仍然会建立与新数据库的连接。为了排除故障,您可以指定连接属性 ifexists=true,以仅答应连接到现有数据库并避免创建新数据库。在这种情况下,如果数据库不存在,getConnection() 方法将抛出异常。
8、安装

8.1、服务器模式

由于官网打不开,可从 sourceforge(https://sourceforge.net/projects/hsqldb/files/hsqldb/hsqldb_2_7/) 上下载 HSQLDB 的安装包然后解压既可。
8.2、进程模式和混合模式

引入相关依赖即可:
  1. <dependency>
  2.     <groupId>org.hsqldb</groupId>
  3.     <artifactId>hsqldb</artifactId>
  4.     <version>2.7.2</version>
  5. </dependency>
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表