文章目錄
- HSQLDB 簡介
- 下載安裝
- 執行 SQL 陳述句
- 生成 DDL 陳述句
- 斷開資料庫連接
- 關閉資料庫
- 連接模式
- 命令列客戶端
- Maven 依賴
- 資源檔案
- 總結
大家好,我是只談技術不剪發的 Tony 老師,今天再給大家介紹一款基于 Java 的嵌入式關系型資料庫:HSQLDB,
??前文我們還介紹過另外兩款基于 Java 的嵌入式關系型資料庫:Apache Derby 和 H2,
HSQLDB 簡介
HSQLDB(HyperSQL DataBase)是一個使用 Java 語言撰寫的開源關系型資料庫,遵循自由的 BSD 協議,很多開源和商業產品都內置了一個 HSQLDB 資料庫,包括 Apache ManifoldCF、OpenOffice、LibreOffice、Kepler、JBoss、Volt DB、Mathematica、Jira、Confluence、TeamCity 等,
HSQLDB 擁有 20 多年的開發歷史,最初由 Thomas Mueller 創建,他也是另一個嵌入式資料庫 H2 的創始人,目前,HSQLDB 的最新版本為 2.5.1(2020-06-29);源代碼可以從 SourceForge 下載,HSQLDB 資料庫的主要特點包括:
- 基于對資料庫理論和 SQL 標準的深入研究創建的原創產品;
- 廣泛支持 SQL: 2016 標準語法,包括大多數可選功能;
- 廣泛兼容其他資料庫語法模式;
- 為中小型資料庫提供了非常快速的訪問性能;
- 三種事務控制模式,包括加鎖(兩階段鎖)和 MVCC 模式,支持 REPEATABLE READ、READ COMMITTED 以及 SERIALIZABLE 隔離級別;
- 完全多執行緒支持;
- 純 Java 實作,jar 檔案只有 1.5 MB 左右,支持 JRE 6 以上環境;
- 廣泛的 JDBC 介面支持,包括批量陳述句和滾動、可更新、可插入 ResultSet 功能,支持自定義的 Java 存盤程序和函式;
- 支持 SQL 觸發器和 Java 觸發器,支持觸發器的同步執行和異步執行;
- 支持 SQL 標準的全部基礎資料型別,包括 TIMESTAMP WITH TIME ZONE、BINARY、BIT、BOOLEAN、 日期時間、INTERVAL、BLOB、CLOB 等,支持 ARRAY 物件,支持 SQL 計算列;
- 支持自定義 DOMAIN 型別,包括型別約束;
- 支持 system-versioned 時態表表,可以保存完整的資料變更歷史;
- 快速 SELECT、INSERT、DELETE、UPDATE 操作,MERGE 陳述句支持單個或多個 INSERT、UPDATE、DELETE 選項;
- 內連接、左/右外連接以及全外連接,自然連接,USING 連接語法,LATERAL 連接和 UNNEST 運算子;UNION、EXCEPT、INTERSECT 集合運算子;
- 標量子查詢、行子查詢、表子查詢以及關聯子查詢,包括 IN、EXISTS、ANY、ALL 運算子;
- 支持 WITH 遞回查詢(通用表運算式);
- 支持視圖和臨時表,包括可修改的視圖;
- 支持主鍵、唯一約束和檢查約束,支持外鍵參照完整性約束和級聯操作;
- ORDER BY、GROUP BY、HAVING、FETCH(LIMIT)以及 OFFSET 子句;
- COUNT、SUM、MIN、MAX、AVG 以及統計聚合函式;
- 支持 SQL 運算式,例如 CASE … WHEN … ELSE … 、NULLIF、BETWEEN、MATCHES 等;支持 INTERVAL 運算式,例如 (CURRENT_DATE - 3 MONTH);
- 支持自增 IDENTITY 欄位和序列;
- 提供了大量的內置函式;
- 支持事務控制陳述句 COMMIT、ROLLBACK 和 SAVEPOINT;
- 每個 JVM 可以創建多個資料庫,每個資料庫中可以創建多個模式;
- 支持 SQL 程序和函式,包括遞回程序和函式;
- 基于密碼的資料庫安全,GRANT 和 REVOKE 陳述句管理的用戶權限和角色,表級 DELETE 權限和列級 SELECT 和 UPDATE 權限;
- 豐富的 ALTER TABLE 命令,包括更改表的欄位型別;
- 完整的 INFORMATION SCHEMA 視圖;
- 查詢優化器可以針對 AND、OR、IN 條件以及 ORDER BY、MAX、MIN 使用索引進行優化;
- 記憶體表提供了最快的訪問性能,磁盤表支持大量資料,支持外部文本表(例如 CSV 檔案);
- 快速 CLOB 和 BLOB 存盤,最大 64 TB;磁盤表(CACHED TABLE)最大 8 TB,外部表最大 256GB;
- 通過內部增量備份提供快速啟動和關閉功能;
- 支持在線和離線備份,支持資料庫 SQL 腳本邏輯備份;
- 支持嵌入式和客戶端/服務器操作模式,可以用于 applets、只讀介質(CD),其他 jar 檔案內部、webstart 和嵌入式應用;
- 支持三種客戶端/服務器協議:HSQL、HTTP 以及 HSQL-BER;可以作為一個 HTTP web 服務器運行,包括 SSL 選項;
- 支持 ODBC 連接;
- 提供了一個強大的命令列管理工具 SqlTool,可以支持大部分主流資料庫;
- 提供了兩個簡單的圖形管理工具,一個用于不同資料庫管理系統之間相互轉換的工具,以及一個用于運行 SQL 測驗腳本的測驗工具,
讓我們趕緊試用一下吧!
下載安裝
打開 HSQLDB 官方網站提供的<Download>鏈接,

選擇最新版本檔案進行下載,解壓縮之后的目錄如下:

安裝目錄包含了一下內容:
- bin 目錄包含了 Windows 系統下的實用腳本,以及如何在瀏覽器中嵌入 HSQLDB 的 HTML 檔案;
- build 目錄包含了ant build.xml 腳本,Gradle build 檔案以及 MSDOS CMD build 檔案;
- data 目錄包含了資料庫檔案,默認為空;
- doc 目錄包含了各種檔案;
- lib 目錄包含了運行 HSQLDB 和 GUI 工具的 hsqldb.jar 檔案,以及 SqlTool 工具的 sqltool.jar 檔案;
- sample 目錄提供了一些示例腳本和配置模板;
- src 目錄包含了所有的源代碼;
- testrun 目錄包含了一些測驗 HSQLDB 和 SqlTool 的腳本,
最新版本的 HSQLDB 需要 Java 8 以上運行環境,可以點擊下載安裝并配置環境變數 JAVA_HOME,將 JDK 的 bin 目錄添加到 PATH 環境變數,然后使用java -version查看當前 Java 版本,
C:\Users\dongx> java -version
java version "13.0.1" 2019-10-15
Java(TM) SE Runtime Environment (build 13.0.1+9)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
接下來就可以運行 bin 目錄下的 runManagerSwing.bat(Windows)腳本啟動 HSQLDB 資料庫管理工具,該工具可以通過 JDBC API 連接各種資料庫,
默認值 URL 連接的是記憶體資料庫,點擊下面的“OK”就可以連接 HSQLDB 資料庫了,

其中,
- File 選單可以建立或者關閉連接,運行和保存腳本,保存結果,退出等;
- View 可以用于設定界面顯示;
- Command 提供了快速命令輸入和語法幫助;
- Recent 記錄了最近執行過的命令;
- Options 提供了一些設定選項;
- Tools 提供了實用工具,需要單獨編譯;
- Schemas 可以選擇顯示的模式;
- Help 提供了一些幫助資訊,
界面左側是資料庫的連接資訊和物件,右側是 SQL 命令區域和執行結果,
執行 SQL 陳述句
在右側 SQL 命令區域輸入以下命令創建一個測驗表:
create table test(id integer not null primary key, val varchar(50));
點擊“Execute SQL”運行命令創建表,
此時,界面左側增加了一個 TEST 表節點,命令區域下面顯示了運行的結果,然后繼續執行以下命令插入資料并查詢結果:
insert into test values (1, 'a'), (2,'b'), (3,'c');
select * from test;
??Options 選單提供了一個生成示例表的腳本 Insert test data,
生成 DDL 陳述句
在命令區域輸入 SCRIPT 命令查看資料庫的 DDL 陳述句,

SCRIPT 命令支持檔案名選項,例如 SCRIPT ‘filename’ 可以將 DDL 陳述句保存到指定檔案中,包括生成資料的 SQL 陳述句,
??除了 SCRIPT 命令之外,PERFORM EXPORT SCRIPT 和 PERFORM IMPORT SCRIPT 命令也可以用于匯入匯出資料庫和表結構,具體可以參考官方檔案,
斷開資料庫連接
輸入 DISCONNECT 命令,或者點擊 File 選單中的 Close Connection 斷開當前資料庫連接,
關閉資料庫
輸入 SHUTDOWN 命令關閉當前當前資料庫,對于記憶體存盤模式同時會銷毀所有的物件,
連接模式
H2 支持兩種不同的連接模式:嵌入式(In-Process)和服務器(Server)模式,所有的模式都支持記憶體存盤、磁盤持久化存盤以及 Java 資源檔案存盤(只讀),
對于大多數應用,嵌入式模式的訪問速度更快,因為資料不需要轉換并通過網路傳輸;主要的缺點是默認情況下無法從應用程式外部連接資料庫,
服務器模式提供了最大的可訪問性,資料庫引擎運行在 JVM 中,打開一個或多個嵌入的資料庫,它可以監聽同一個服務器或來自網路的連接請求,并將這些連接轉換為行程內部的資料庫連接,大多數服務器模式中,服務端可以服務大量的資料庫和客戶端連接,
開發環境同樣推薦使用服務器模式,它運行在應用運行時通過其他工具查詢資料庫,根據連接協議的不同,服務器模式又可以分為三種:HyperSQL HSQL Server、HyperSQL HTTP Server 以及 HyperSQL HTTP Servlet,
HyperSQL HSQL Server 時推薦的運行模式,速度最快,這種模式會使用專用的通信協議,以下示例使用該模式啟動服務,包含了一個(默認)資料庫,資料庫檔案名為“mydb.*”,公開名稱為“xdb”(隱藏了檔案名),
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
命令列引數 --help 可以用于查看有效引數串列,
HyperSQL HTTP Server 模式適合服務器只能通過 HTTP 協議訪問的場景,使用該模式的唯一原因就是客戶端或者服務器由于防火墻限制只能使用 HTTP 協議,其他情況都不應該使用這種模式,該模式提供了一個特殊的 web 服務器,允許 JDBC 客戶端通過 HTTP 連接資料庫;它也可以作為一個小型通用的靜態頁面服務器使用,
如果想要運行 HTTP Server,可以將上面示例中的類名改成以下名稱:
ava -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 file:mydb --dbname.0 xdb
命令列引數 --help 可以用于查看有效引數串列,
HyperSQL HTTP Servlet 模式通用使用 HTTP 協議訪問資料庫,用于 Servlet 引擎或者應用服務器(Tomcat、Resin 等)提供資料庫訪問,該模式無法獨立于 Servlet 引擎啟動,HSQLDB jar 檔案中的 Servlet 類需要安裝到應用服務器中以提供連接服務,資料庫檔案路徑使用應用服務器配置屬性指定,
HTTP Server 和 HTTP Servlet 模式都有可以通過 JDBC 驅動進行訪問,但不提供 web 前端;HTTP Servlet 模式可以支持多個資料庫,通常來說,在應用服務器中使用資料庫引擎時通常不使用這種模式,而是通過行程內的方式連接資料庫,或者使用單獨的資料庫服務器,
??關于這三種服務器模式的配置和連接方式,可以參考官方檔案,
命令列客戶端
H2 資料庫自帶了一個命令列 Shell 工具,輸入以下命令呼叫該工具:
C:\Users\dongx>java -cp "C:\Program Files (x86)\H2\bin\h2-1.4.200.jar" org.h2.tools.Shell
Welcome to H2 Shell 1.4.200 (2019-10-14)
Exit with Ctrl+C
[Enter] jdbc:h2:tcp://localhost/~/test
URL
[Enter] org.h2.Driver
Driver
[Enter] sa
User
Password
Connected
Commands are case insensitive; SQL statements end with ';'
help or ? Display this help
list Toggle result list / stack trace mode
maxwidth Set maximum column width (default is 100)
autocommit Enable or disable autocommit
history Show the last 20 statements
quit or exit Close the connection and exit
sql>
按照提示輸入資料庫的連接資訊即可,接下來就可以輸入各種 SQL 陳述句了:
sql> select now();
NOW()
2020-09-03 20:54:28.629717
(1 row, 2 ms)
輸入 quit 或者 exit 可以退出客戶端,
Maven 依賴
如果想要在自己的 Java 程式中使用 HSQLDB 資料庫,可以添加以下 Maven 依賴:
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.5.1</version>
</dependency>
最新的版本配置可以查看 Maven Central,
資源檔案
如果想要進一步深入了解和學習 HSQLDB 資料庫,可以參考以下資源:
- HSQLDB 官方網站;
- HSQLDB 官方檔案;
- tutorialspoint 在線教程;
- 管理開發工具:DBeaver、SQuirreL SQL、DbVisualizer,
總結
HSQLDB 是一款完全使用 Java 實作的關系型資料庫,支持嵌入式、客戶端/服務器部署模式,HSQLDB 資料庫是一個成熟的產品,已經被大量開源和商業的軟體作為嵌入式資料庫使用,
如果覺得文章對你有用,歡迎關注??、評論??、點贊??!
CSDN認證博客專家
資料庫架構師
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1507.html
標籤:其他
上一篇:Laravel框架中連表查詢
