Hsqldb是一個開放源代碼的 JAVA數(shù)據(jù)庫,其具有標(biāo)準(zhǔn)的SQL語法和JAVA接口,它可以自由使用和分發(fā),非常簡潔和快速的。具有Server模式,進(jìn)程內(nèi)模式(In- Process)和內(nèi)存模式(Memory-Only)三種。運(yùn)行Hsqldb需要hsqldb.jar包, 它包含了一些組件和程序。每個程序需要不同的命令來運(yùn)行。它位于項目的lib目錄下,目前的版本是1.8.0.5。官方的下載地址是:http: //prdownloads.sourceforge.net/hsqldb/hsqldb_1_8_0_5.zip?download 在介紹這些模式之前我們需要了解一些Hsqldb所涉及的一些文件。每個Hsqld數(shù)據(jù)庫包含了2到5個命名相同但擴(kuò)展名不同的文件,這些文件位于同一個目錄下。例如,名位"test"的數(shù)據(jù)庫包含了以下幾個文件:
-
test.properties
-
test.script
-
test.log
-
test.data
-
test.backup
properties文件描述了數(shù)據(jù)庫的基本配置。 script文件記錄了表和其它數(shù)據(jù)庫對象的定義。log文件記錄了數(shù)據(jù)庫最近所做的更新。data文件包含了cached(緩沖)表的數(shù)據(jù),而backup文件是將data文件壓縮備份,它包含了data文件上次的最終狀態(tài)數(shù)據(jù)。所有這些文件都是必不可少的,千萬不可擅自刪除。但如果你的數(shù)據(jù)庫沒有緩沖表(cached table),test.data和test.backup文件是不會存在。
接下來我們對Hsqldb的三種模式進(jìn)行簡單介紹,同時包括部分工具的啟動的方式。
一、 Server模式
Server模式提供了最大的可訪問性。應(yīng)用程序(客戶端)通過Hsqldb的JDBC驅(qū)動連接服務(wù)器。在服務(wù)器模式中,服務(wù)器在運(yùn)行的時候可以被指定為最多10個數(shù)據(jù)庫。根據(jù)客戶端和服務(wù)器之間通信協(xié)議的不同,Server模式可以分為以下三種:
1、 Hsqldb Serve
這種模式是首選的也是最快的。它采用HSQLDB專有的通信協(xié)議。啟動服務(wù)器需要編寫批處理命令。Hsqldb提供的所有工具都能以java class歸檔文件(也就是jar)的標(biāo)準(zhǔn)方式運(yùn)行。假如hsqldb.jar位于相對于當(dāng)前路徑的../lib下面。我們的命令將這樣寫:
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB
現(xiàn)在你可能會疑惑,[-database.0 ]、 [dbname.0]為什么在后面加[0]。_... ...我們不是在前面說服務(wù)模式運(yùn)行的時候可以指定10個數(shù)據(jù)庫嗎,如有多個數(shù)據(jù)庫,則繼續(xù)寫命令行參數(shù)-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb ... ...
新建文本文件保存上面命令,文件名可以隨意,將后綴名改成bat,然后直接執(zhí)行批處理文件即可。在以后介紹的執(zhí)行啟動工具的命令采用同樣方法。
上面啟動服務(wù)器的命令啟動了帶有一個(默認(rèn)為一個數(shù)據(jù)庫)數(shù)據(jù)庫的服務(wù)器,這個數(shù)據(jù)庫是一個名為"mydb.*"文件,這些文件就是mydb.Properties、mydb.script、mydb.log等文件。其中demoDB是mydb的別名,可在連接數(shù)據(jù)庫時使用。
2、 Hsqldb Web Server
這種模式只能用在通過HTTP協(xié)議訪問數(shù)據(jù)庫服務(wù)器主機(jī),采用這種模式唯一的原因是客戶端或服務(wù)器端的防火墻對數(shù)據(jù)庫對網(wǎng)絡(luò)連接強(qiáng)加了限制。其他情況下,這種模式不推薦被使用。
運(yùn)行web服務(wù)器的時候,只要將剛才命令行中的主類(main class)替換成:org.hsqldb.WebServer
3、 Hsqldb Servlet
這種模式和Web Server一樣都采用HTTP協(xié)議,當(dāng)如Tomcat或Resin等servlet引擎(或應(yīng)用服務(wù)器)提供數(shù)據(jù)庫的訪問時,可以使用這種模式。但是Servlet模式不能脫離servlet引擎獨(dú)立啟動。為了提供數(shù)據(jù)庫的連接,必須將HSQLDB.jar中的hsqlServlet類放置在應(yīng)用服務(wù)器的相應(yīng)位置。
Web Server和Servlet模式都只能在客戶端通過JDBC驅(qū)動來訪問。Servlet模式只能啟動一個單獨(dú)的數(shù)據(jù)庫。請注意做為應(yīng)用程序服務(wù)器的數(shù)據(jù)庫引擎通常不使用這種模式。
連接到以Server模式運(yùn)行的數(shù)據(jù)庫
當(dāng)HSQLDB服務(wù)器運(yùn)行時,客戶端程序就可以通過hsqldb.jar中帶有的HSQLDB JDBC Driver連接數(shù)據(jù)庫。
java 代碼
- try{
-
- Class.forName("org.hsqldb.jdbcDriver") ;
-
- }catch(ClassNotFoundException e){
-
- e.printStackTrace();
-
- }
-
- Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");
-
注:hsqldb的默認(rèn)用戶是sa密碼為空。修改默認(rèn)密碼的方法我們將在工具使用部分做出介紹。
二、 In-Process模式
In-Process模式又稱Standalone模式。這種模式下,數(shù)據(jù)庫引擎作為應(yīng)用程序的一部分在同一個JVM中運(yùn)行。對于一些應(yīng)用程序來說, 這種模式因為數(shù)據(jù)不用轉(zhuǎn)換和通過網(wǎng)絡(luò)的傳送而使得速度更快一些。其主要的缺點(diǎn)就是默認(rèn)的不能從應(yīng)用程序外連接到數(shù)據(jù)庫。所以當(dāng)應(yīng)用程序正在運(yùn)行的時候,你不能使用類似于Database Manager的外部工具來查看數(shù)據(jù)庫的內(nèi)容。在1.8.0版本中,你可以從同一個JVM的一個線程里面來運(yùn)行一個服務(wù)器實例,從而可以提供外部連接來訪問你的In-Process數(shù)據(jù)庫。
推薦的使用In-Process模式方式是:開發(fā)的時候為數(shù)據(jù)庫使用一個HSQLDB 服務(wù)器實例,然后在部屬的時候轉(zhuǎn)換到In-Process內(nèi)模式。
一個In-Process模式數(shù)據(jù)庫是從JDBC語句開始啟動的,在連接URL中帶有指定的數(shù)據(jù)庫文件路徑作為JDBC的一部分。例如,假如數(shù)據(jù)庫名稱為testdb,它的數(shù)據(jù)庫文件位于與確定的運(yùn)行應(yīng)用程序命令相同的目錄下,下面的代碼可以用來連接數(shù)據(jù)庫:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb ", "sa", "");
數(shù)據(jù)庫文件的路徑格式在Linux主機(jī)和Windows主機(jī)上都被指定采用前斜線("/")。所以相對路徑或者是相對于相同分區(qū)下相同目錄路徑的表達(dá)方式是一致的。使用相對路徑的時候,這些路徑表示的是相對于用于啟動JVM的shell命令的執(zhí)行路徑。
三、Memry-Only數(shù)據(jù)庫
Memory-Only數(shù)據(jù)庫不是持久化的而是全部在隨機(jī)訪問的內(nèi)存中。因為沒有任何信息寫在磁盤上。這種模式通過mem:協(xié)議的方式來指定:
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:dbName", "sa", "");
你也可以在server.properties中指定相同的URL來運(yùn)行一個Memory-Only(僅處于內(nèi)存中)服務(wù)器實例。
注意事項:當(dāng)一個服務(wù)器實例啟動或者建立一個in-process數(shù)據(jù)庫連接的時候,如果指定的路徑?jīng)]有數(shù)據(jù)庫存在,那么就會創(chuàng)建一個新的空的數(shù)據(jù) 庫。這個特點(diǎn)的副作用就是讓那些新用戶產(chǎn)生疑惑。在指定連接已存在的數(shù)據(jù)庫路徑的時候,如果出現(xiàn)了什么錯誤的話,就會建立一個指向新數(shù)據(jù)庫的連接。為了解 決這個問題,你可以指定一個連接屬性ifexists=true只允許和已存在的數(shù)據(jù)庫建立連接而避免創(chuàng)建新的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在的話, getConnection()方法將會拋出異常。
四、 工具的使用
Hsqldb提供的主要的工具類:
-
org.hsqldb.util.DatabaseManager
-
org.hsqldb.util.DatabaseManagerSwing
-
org.hsqldb.util.Transfer
-
org.hsqldb.util.QueryTool
-
org.hsqldb.util.SqlTool
其中DatabaseManage和Sql Tool,只能用命令行參數(shù)來運(yùn)行。你可以在命令行后面加上參數(shù)-?來查看這些工具可用的參數(shù)列表。其他工具可以通過DatabaseManager的主界面啟動,便于交互式操作。
為了便于操作,我們同樣把這些工具啟動的命令做成批處理文件。方法和前面我們所介紹的創(chuàng)建啟動服務(wù)模式命令的方法一樣。在這里我們再強(qiáng)調(diào)一次hsqldb.jar的位置,因為所有啟動命令都是參照hsqldb.jar的位置編寫的
如果您覺得麻煩你也可以采用絕對路徑編寫命令。
現(xiàn)在我們一起運(yùn)行AWT版本的DatabaseManager工具,hsqldb.jar位于相對于當(dāng)前路徑的../lib下面,命令如下:
Java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager
將命令保存為后綴名為bat的批處理文件,保存為DatabaseManager.bat,也可根據(jù)個人習(xí)慣命名。執(zhí)行DatabaseManager.bat你將看到如下畫面:。

現(xiàn)在對這個簡潔的登錄界面做個簡單的介紹*_*
-
Recent:選擇你最近的登錄方案,[可選]
-
Setting Name:本次登錄方案名稱,如果本次登錄成功,那么等你下次登錄的時候在Recent下拉列表中將看到你的成功登錄方案[可選]
-
Type:登錄模式,其中包括In-Memory模式、Standalone(In-process)模式、Server模式、WebServer模式... ...[必選]
-
Driver:連接數(shù)據(jù)庫的驅(qū)動程序[必選]
-
URL:連接數(shù)據(jù)庫的URL[必選]
-
User:用戶名[必選]
-
Password:密碼[ 除非密碼為空]
注:如果Type項選擇Server模式或者WebServer模式需要你事先啟動與之對應(yīng)的服務(wù)模式。而Standalone(In- process)默認(rèn)是不支持DatabaseManager連接的,具體原因我們已經(jīng)在前面解釋過。至于In-Memory可以隨意登錄,所有的操作數(shù) 據(jù)都不會記錄在本地磁盤。而Type還有很多其他選項,具體的用法可以參考官方文檔,位置在hsqldb目錄\doc\guide\ guide.pdf。
如果你想運(yùn)行DatabaseManagerSwing也很簡單,相信你已經(jīng)想到了。我們只需要把啟動DatabaseManager命令修改成: Java -cp ../lib/hsqldb.jar org.hsqldb.util. DatabaseManagerSwing
兩種工具的操作方法類似,這里就不再贅述。
差點(diǎn)忘記,前面我說過要給出修改sa用戶密碼的方法。最后再占用大家一點(diǎn)點(diǎn)時間。當(dāng)你用SA通過DatabaseManager登錄成功后會出現(xiàn)如下界面:

在右上方的空白區(qū)域輸入set password "newpassword" 點(diǎn)擊執(zhí)行即可。
到這里我們對Hsqldb的簡單介紹就結(jié)束了。
本文參考自Hsqldb的官方文檔,個人水平有限難免出現(xiàn)錯誤,
1.bmp |
描述: |
|
文件大小: |
483 KB |
看過的: |
文件被下載或查看 1003 次 |
下載
|
2.bmp |
描述: |
|
文件大小: |
288 KB |
看過的: |
文件被下載或查看 957 次 |
下載 |
|