HSQLDB(HyperSQL DataBase)是純 Java 撰寫、極輕量且效能優異的關聯式資料庫,廣泛用於單元測試、嵌入式應用與快速原型開發。本文系統整理 HSQLDB 的持久化模式、命令列操作、內建工具類,並示範如何以 Ant 實現持續整合建置流程。
| 模式 | JDBC URL 格式 | 特性 |
|---|---|---|
| Server 模式 | jdbc:hsqldb:hsql://host/dbname | 多連線、網路存取、生產常用 |
| Web Server 模式 | jdbc:hsqldb:https://host/dbname | HTTP 通訊、穿透防火牆 |
| Servlet 模式 | 透過 Tomcat 等容器部署 | 整合 Web 應用、共享連線池 |
| 獨占模式 | jdbc:hsqldb:file:/path/dbname | 單連線、檔案鎖定、嵌入式首選 |
| 記憶體模式 | jdbc:hsqldb:mem:dbname | 極速、關閉即遺失、適合測試 |
org.hsqldb.util.DatabaseManager:字元介面管理工具org.hsqldb.util.DatabaseManagerSwing:Swing 圖形化管理工具org.hsqldb.util.Transfer:資料遷移/匯出入org.hsqldb.util.QueryTool:互動式查詢工具org.hsqldb.util.SqlTool:批次執行 SQL 腳本、產生報表的核心工具啟動範例:java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
預設資料庫名稱 test 會產生五個檔案:
test.properties:屬性設定test.script:DDL/DML 腳本日誌(核心資料)test.log:交易日誌test.data:CACHED 資料表資料test.backup:備份壓縮檔
# 1. 進入 HSQLDB 目錄
cd F:\temp\hsqldb
# 2. 啟動預設 test 資料庫
java -classpath ./lib/hsqldb.jar org.hsqldb.Server
# 產生 test.lck, test.log, test.properties
# 3. 指定資料庫檔案名與別名
java -classpath ./lib/hsqldb.jar org.hsqldb.Server -database.0 adb -dbname.0 adb
# 產生 adb.lck, adb.log, adb.properties
# 連線 URL: jdbc:hsqldb:hsql://localhost/adb
# 4. 指定資料庫存放子目錄
java -classpath ./lib/hsqldb.jar org.hsqldb.Server -database.0 data/adb -dbname.0 adb
# 在 data/ 目錄下建立檔案,連線 URL 不變
在使用者家目錄建立 sqltool.rc:
urlid localhost-sa
url jdbc:hsqldb:hsql://localhost/
username sa
password
java -jar ./lib/hsqldb.jar --sql "INSERT INTO t VALUES(1); SELECT * FROM t;" localhost-sa
java -jar ./lib/hsqldb.jar localhost-sa sample.sql
sample.sql 關鍵指令:
\c true/false:錯誤是否繼續執行\p 訊息:列印進度訊息\o report.txt:導出查詢結果至文字檔\H:切換 HTML 格式報表輸出COMMIT;:手動提交交易(預設不自動提交)
java -jar ./lib/hsqldb.jar --sql "SHUTDOWN" localhost-sa
<project name="hsqldb-build" basedir="." default="help">
<property name="hsqldb.path" value="lib/hsqldb.jar"/>
<property name="database.dir" value="db"/>
<property name="database.name" value="appfuse"/>
<property name="database.urlid" value="localhost-sa"/>
<target name="startServer" description="啟動 HSQLDB Server">
<java classname="org.hsqldb.Server" classpath="${hsqldb.path}" fork="true" failonerror="true">
<arg value="-database.0"/> <arg value="file:${database.dir}/${database.name}"/>
<arg value="-dbname.0"/> <arg value="${database.name}"/>
</java>
</target>
<target name="shutdownServer" description="關閉 Server">
<java jar="${hsqldb.path}" classpath="${hsqldb.path}" fork="true" failonerror="true">
<arg value="--sql"/> <arg value="shutdown"/> <arg value="${database.urlid}"/>
</java>
</target>
<target name="populate" description="匯入範例資料">
<java jar="${hsqldb.path}" classpath="${hsqldb.path}" fork="true" failonerror="true">
<arg value="${database.urlid}"/> <arg value="src/org/hsqldb/sample/sampledata.sql"/>
</java>
</target>
<target name="report" description="產生 HTML 報表">
<mkdir dir="report"/>
<java jar="${hsqldb.path}" classpath="${hsqldb.path}" fork="true" failonerror="true">
<arg value="${database.urlid}"/> <arg value="querydata.sql"/>
</java>
</target>
<target name="clean" description="清理輸出">
<delete dir="report"/>
</target>
</project>
執行流程:ant startServer populate report shutdownServer 即可完成資料庫啟動、資料載入、報表產生、關閉的完整自動化流程。
掌握 HSQLDB 的多種模式、命令列工具與 Ant 整合,能讓測試環境建置、資料遷移、報表產出全自動化,極大提升團隊開發效率與 CI/CD 可靠度。