hsqldb

hsqldb

HSQLDB(HyperSQL DataBase)是一個開放原始碼的JAVA資料庫,其具有標準的SQL語法和JAVA接口,它可以自由使用和分發,非常簡潔和快速的。在其官網可以獲得最新的程式原始碼及jar包檔案(當前版本為2.4.1)。

簡介

HSQLDB是一個開放原始碼的JAVA資料庫,其具有標準的SQL語法和JAVA接口,它可以自由使用和分發,非常簡潔和快速的。具有Server模式,每個程式需要不同的命令來運行。

模式

在HSQLDB中,有三種比較常用模式:

伺服器模式

Server模式提供了最大的可訪問性。應用程式(客戶端)通過Hsqldb的JDBC驅動連線伺服器。在伺服器模式中,伺服器在運行的時候可以被指定為最多10個資料庫。根據客戶端和伺服器之間通信協定的不同,Server模式可以分為以下三種:

1、 Hsqldb Server

這種模式是首選的也是最快的。它採用HSQLDB專有的通信協定。啟動伺服器需要編寫批處理命令。Hsqldb提供的所有工具都能以java class歸檔檔案(也就是jar)的標準方式運行。假如hsqldb.jar位於相對於當前路徑的../lib下面。我們的命令將這樣寫:

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB

如今你可能會疑惑,[-database.0 ]、 [dbname.0]為什麼在後面加[0]。_... ...我們不是在前面說服務模式運行的時候可以指定10個資料庫嗎,如有多個資料庫,則繼續寫命令行參數-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb ... ...

新建文本檔案保存上面命令,檔案名稱可以隨意,將後綴名改成bat,然後直接執行批處理檔案即可。在以後介紹的執行啟動工具的命令採用同樣方法。

上面啟動伺服器的命令啟動了帶有一個(默認為一個資料庫)資料庫的伺服器,這個資料庫是一個名為"mydb.*"檔案,這些檔案就是mydb.Properties、mydb.script、mydb.log等檔案。其中demoDB是mydb的別名,可在連線資料庫時使用。

2、 Hsqldb Web Server

這種模式只能用在通過HTTP協定訪問資料庫伺服器主機,採用這種模式唯一的原因是客戶端或伺服器端的防火牆對資料庫對網路連線強加了限制。其他情況下,這種模式不推薦被使用。

運行web伺服器的時候,只要將剛才命令行中的主類(main class)替換成:org.hsqldb.WebServer

3、 Hsqldb Servlet

這種模式和Web Server一樣都採用HTTP協定,當如Tomcat或Resin等servlet引擎(或套用伺服器)提供資料庫的訪問時,可以使用這種模式。但是Servlet模式不能脫離servlet引擎獨立啟動。為了提供資料庫的連線,必須將HSQLDB.jar中的hsqlServlet類放置在套用伺服器的相應位置。

Web Server和Servlet模式都只能在客戶端通過JDBC驅動來訪問。Servlet模式只能啟動一個單獨的資料庫。請注意做為應用程式伺服器的資料庫引擎通常不使用這種模式。

連線到以Server模式運行的資料庫

當HSQLDB伺服器運行時,客戶端程式就可以通過hsqldb.jar中帶有的HSQLDB JDBC Driver連線資料庫。

java 代碼

try{

Class.forName("org.hsqldb.jdbcDriver") ;

}catch(ClassNotFoundException e){

e.printStackTrace();

}

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

註:hsqldb的默認用戶是sa密碼為空。修改默認密碼的方法我們將在工具使用部分做出介紹。

In-Process模式

In-Process模式又稱Standalone模式。這種模式下,資料庫引擎作為應用程式的一部分在同一個JVM中運行。對於一些應用程式來說, 這種模式因為數據不用轉換和通過網路的傳送而使得速度更快一些。其主要的缺點就是默認的不能從應用程式外連線到資料庫。所以當應用程式正在運行的時候,你不能使用類似於Database Manager的外部工具來查看資料庫的內容。在1.8.0版本中,你可以從同一個JVM的一個執行緒裡面來運行一個伺服器實例,從而可以提供外部連線來訪問你的In-Process資料庫。

推薦的使用In-Process模式方式是:開發的時候為資料庫使用一個HSQLDB 伺服器實例,然後在部屬的時候轉換到In-Process內模式。

一個In-Process模式資料庫是從JDBC語句開始啟動的,在連線URL中帶有指定的資料庫檔案路徑作為JDBC的一部分。例如,假如資料庫名稱為testdb,它的資料庫檔案位於與確定的運行應用程式命令相同的目錄下,下面的代碼可以用來連線資料庫:

Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb ", "sa", "");

資料庫檔案的路徑格式在Linux主機和Windows主機上都被指定採用前斜線("/")。所以相對路徑或者是相對於相同分區下相同目錄路徑的表達方式是一致的。使用相對路徑的時候,這些路徑表示的是相對於用於啟動JVM的shell命令的執行路徑。

資料庫

Memory-Only資料庫不是持久化的而是全部在隨機訪問的記憶體中。因為沒有任何信息寫在磁碟上。這種模式通過mem:協定的方式來指定:

Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:dbName", "sa", "");

你也可以在server.properties中指定相同的URL來運行一個Memory-Only(僅處於記憶體中)伺服器實例。

注意事項:當一個伺服器實例啟動或者建立一個in-process資料庫連線的時候,如果指定的路徑沒有資料庫存在,那么就會創建一個新的空的資料庫。這個特點的副作用就是讓那些新用戶產生疑惑。在指定連線已存在的資料庫路徑的時候,如果出現了什麼錯誤的話,就會建立一個指向新資料庫的連線。為了解決這個問題,你可以指定一個連線屬性ifexists=true只允許和已存在的資料庫建立連線而避免創建新的資料庫,如果資料庫不存在的話,getConnection()方法將會拋出異常。

Memory-only 也有成為in memory 模式。在server模式或者in process 下可以使用,可看作前述2種模式的一個選項,已驗證。如在在server模式下統一用 connection = DriverManager.getConnection("jdbc:hsqldb:hsql://x.x.x.x:port/xdb", "sa", "");

而伺服器端具體是file,mem模式又服務端啟動參數決定,對客戶端透明

in process 模式下按此訪問 connection = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

歷史發展

hsqldb hsqldb

HSQLDB 是由 Tomas Muller 的 Hypersonic SQL 後續開發出來的項目, hypersonic db 是純 java 所開發的資料庫, 可以透過 jdbc driver 來存取, 支持 ANSI-92 標準的 SQL 語法, 而且他占的空間很小, 大約只有 160K, 擁有快速的資料庫引擎, 也提供了一些工具, 例如 web-server, 緩衝查詢, 及一些管理工具. 他是屬於 BSD 的 license, 可以自由下載, 並且可以安裝使用在商業產品之上。

HSQLDB非常適合在用於快速的測試和演示的Java程式中。做單元測試也非常理想。

HSQLDB不適合管理大型數據,例如百萬數量級記錄的資料庫套用。HSQLDB簡介它具有Server模式,進程內模式(In-Process)和記憶體模式(Memory-Only)三種。運行HSQLDB需要hsqldb.jar包, 它包含了一些組件和程式。

在其官網可以獲得最新的程式原始碼及jar包檔案( )。

HSQLDB2.2 支持多執行緒,提供更改的高性能,提供並發事物控制模型(mvcc)。

HSQLDB具有11年的開發歷史,並在1700多個開源項目中被廣泛使用。

相關詞條

相關搜尋

熱門詞條

聯絡我們