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

news/2024/10/6 3:43:07/文章来源:https://www.cnblogs.com/wuyongyin/p/18165292

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、访问数据库工具

可以通过如下方法启动访问数据库的工具:

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

Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");

B、file catalog

Connection c = DriverManager.getConnection("jdbc:hsqldb:file:d:/temp/test", "SA", "");

C、res catalog

Connection c = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");

5.2、服务器模式

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

5.2.1、HyperSQL HSQL Server

这是运行数据库服务器的首选方式,也是最快的方式。这种模式使用专有的通信协议。可以通过如下命令启功数据库:

java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:d:/temp/mydb --dbname.0 test #启动file数据库,数据库文件保存在d:/temp目录下,数据名称为 test
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 mem:mydb --dbname.0 test #启动mem数据库,数据名称为 test

使用 JDBC 访问该数据库:

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

5.2.2、HyperSQL HTTP Server

这种访问方法用于数据库服务器只能使用 HTTP 协议的情况。使用此访问方法的唯一原因是客户端或服务器机器上的防火墙所施加的限制,不应在没有此类限制的情况下使用。HyperSQL HTTP 服务器是一个特殊的 Web 服务器,允许 JDBC 客户端通过 HTTP 连接数据库。可以通过如下命令启功数据库:

java -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 file:d:/temp/mydb --dbname.0 test #启动file数据库,数据库文件保存在d:/temp目录下,数据名称为 test
java -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 mem:mydb --dbname.0 test #启动mem数据库,数据名称为 test

使用 JDBC 访问该数据库:

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 的服务,这样本地和远程就都可以访问数据库了。

HsqlProperties p = new HsqlProperties();
p.setProperty("server.database.0","d:/temp/test");
p.setProperty("server.dbname.0","test");
Server server = new Server();
server.setProperties(p);
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、进程模式和混合模式

引入相关依赖即可:

<dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId><version>2.7.2</version>
</dependency>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739664.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lazarus 设置中文界面及开启代码提示

1.选择, Tools-Options-Environment-General-Language 选择Chinese[zh-CN],点击ok,重启即可 2.开启标识符补全,代码提示,如下图设置即可 本人小站:www.shibanyan.com

《Programming from the Ground Up》阅读笔记:p19-p48

《Programming from the Ground Up》学习第2天,p19-p48总结,总计30页。 一、技术总结 1.object file p20, An object file is code that is in the machines language, but has not been completely put together。 之前在很多地方都看到object file这个概念,但都没有看到起…

Qt/C++音视频开发78-获取本地摄像头支持的分辨率/帧率/格式等信息/mjpeg/yuyv/h264

一、前言 上一篇文章讲到用ffmpeg命令方式执行打印到日志输出,可以拿到本地摄像头设备信息,顺藤摸瓜,发现可以通过执行 ffmpeg -f dshow -list_options true -i video="Webcam" 命令获取指定摄像头设备的分辨率帧率格式等信息,会有很多条。那为什么需要这个功能呢…

Lazarus的安装

推荐安装秋风绿色版lazarus,秋风的blog上有绿色版百度网盘的下载地址,对于没有VIP会员的可以去QQ群下载,群号:103341107,速度比网盘好些 下载完成后,推荐解压到非系统盘根目录,在根目录里找到“lazarus绿化工具-x86_64-win64.exe”并运行。上图的路径是你的程序所在目录…

关于电源的基础知识

基础知识很多时候,都没有直接的作用。但是不积跬步无以至千里,不积小流无以成江海。接下来就用一页笔记,简单说明一下不理想源的输出阻抗。在一个电路系统中,前级和后级的连接,大多需要计算输入输出阻抗的。

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)\(A\) Insert \(AC\)循环结构。点击查看代码 int a[200]; int main() {int n,k,x,i;cin>>n>>k>>x;for(i=1;i<=n;i++){cin>>a[i];cout<<a[i]<<" ";i…

浅谈进程隐藏技术

在之前几篇文章已经学习了解了几种钩取的方法,这篇文章就利用钩取方式完成进程隐藏的效果。在实现进程隐藏时,首先需要明确遍历进程的方法。前言 在之前几篇文章已经学习了解了几种钩取的方法 ● 浅谈调试模式钩取 ● 浅谈热补丁 ● 浅谈内联钩取原理与实现 ● 导入地址表钩取…

什么是新质生产力

什么是新质生产力

好消息!数据库管理神器 Navicat 推出免费精简版:Navicat Premium Lite

前言 好消息,前不久Navicat推出了免费精简版的数据库管理工具Navicat Premium Lite,可用于商业和非商业目的,我们再也不需要付费、找破解版或者找其他免费平替工具了,有需要的同学可以马上下载使用起来。 工具官方介绍 Navicat Premium Lite 是 Navicat 的精简版,它包含了…

读人工智能全传05专家系统

读人工智能全传05专家系统1. 知识就是力量 1.1. 人工智能领域此前存在的问题是过度关注搜索和解决问题这种通用法则 1.2. “弱”方法缺少一个关键的要素,而这一要素才是在所有智能行为中起决定性作用的组成部分:知识 1.3. 一种基于知识的人工智能系统:专家系统开始出现,它能…

副本集要点

oplog 中的每个操作都是幂等的。也就是说,无论对目标数据集应用一次还是多次,oplog 操作都会产生相同的结果。 Oplog大小当您第一次启动副本集成员时,如果您未指定 oplog 大小,MongoDB 将创建默认大小的 oplog。默认 oplog 大小取决于存储引擎: 存储引擎默认 Oplog 大小Wi…

副本集

MongoDB 中的副本集是一组mongod提供冗余和高可用性的进程。副本集的成员包括: 主服务器接收所有写操作。 主节点是副本集中唯一接收写入操作的成员。MongoDB 在主节点上应用写入操作,然后将操作记录在主节点的oplog上。辅助成员复制此日志并将操作应用于其数据集。副本集的所…