Hsqldb簡介和基本使用

Hsqldb是一個開放源代碼的 JAVA數據庫,其具有標準的SQL語法和JAVA接口,它可以自由使用和分發,非常簡潔和快速的。具有Server模式,進程內模式(In- Process)和內存模式(Memory-Only)三種。運行Hsqldb需要hsqldb.jar包, 它包含了一些組件和程序。每個程序需要不同的命令來運行。它位於項目的lib目錄下,目前的版本是1.8.0.5。官方的下載地址是:http: //prdownloads.sourceforge.net/hsqldb/hsqldb_1_8_0_5.zip?download
        在介紹這些模式之前我們需要了解一些Hsqldb所涉及的一些文件。每個Hsqld數據庫包含了2到5個命名相同但擴展名不同的文件,這些文件位於同一個目錄下。例如,名位"test"的數據庫包含了以下幾個文件:
  • test.properties

  • test.script

  • test.log

  • test.data

  • test.backup

  properties文件描述了數據庫的基本配置。 script文件記錄了表和其它數據庫對象的定義。log文件記錄了數據庫最近所做的更新。data文件包含了cached(緩衝)表的數據,而backup文件是將data文件壓縮備份,它包含了data文件上次的最終狀態數據。所有這些文件都是必不可少的,千萬不可擅自刪除。但如果你的數據庫沒有緩衝表(cached table),test.datatest.backup文件是不會存在。

  接下來我們對Hsqldb的三種模式進行簡單介紹,同時包括部分工具的啓動的方式

一、 Server模式

 

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

1 Hsqldb Serve

  這種模式是首選的也是最快的。它採用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.Propertiesmydb.scriptmydb.log等文件。其中demoDBmydb的別名,可在連接數據庫時使用。

2 Hsqldb Web Server

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

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

3 Hsqldb Servlet

    這種模式和Web Server一樣都採用HTTP協議,當如TomcatResinservlet引擎(或應用服務器)提供數據庫的訪問時,可以使用這種模式。但是Servlet模式不能脫離servlet引擎獨立啓動。爲了提供數據庫的連接,必須將HSQLDB.jar中的hsqlServlet類放置在應用服務器的相應位置。

  Web ServerServlet模式都只能在客戶端通過JDBC驅動來訪問。Servlet模式只能啓動一個單獨的數據庫。請注意做爲應用程序服務器的數據庫引擎通常不使用這種模式。

連接到以Server模式運行的數據庫

  HSQLDB服務器運行時,客戶端程序就可以通過hsqldb.jar中帶有的HSQLDB JDBC Driver連接數據庫。

java 代碼
  1. try{   
  2.   
  3.          Class.forName("org.hsqldb.jdbcDriver") ;   
  4.   
  5.  }catch(ClassNotFoundException e){   
  6.   
  7.          e.printStackTrace();     
  8.   
  9.  }   
  10.   
  11.      Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb""sa""");   
  12.   

   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命令的執行路徑。

三、Memry-Only數據庫


  Memory-Only數據庫不是持久化的而是全部在隨機訪問的內存中。因爲沒有任何信息寫在磁盤上。這種模式通過mem:協議的方式來指定:

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

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

  注意事項:當一個服務器實例啓動或者建立一個in-process數據庫連接的時候,如果指定的路徑沒有數據庫存在,那麼就會創建一個新的空的數據 庫。這個特點的副作用就是讓那些新用戶產生疑惑。在指定連接已存在的數據庫路徑的時候,如果出現了什麼錯誤的話,就會建立一個指向新數據庫的連接。爲了解 決這個問題,你可以指定一個連接屬性ifexists=true只允許和已存在的數據庫建立連接而避免創建新的數據庫,如果數據庫不存在的話, 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,只能用命令行參數來運行。你可以在命令行後面加上參數-?來查看這些工具可用的參數列表。其他工具可以通過DatabaseManager的主界面啓動,便於交互式操作。

  爲了便於操作,我們同樣把這些工具啓動的命令做成批處理文件。方法和前面我們所介紹的創建啓動服務模式命令的方法一樣。在這裏我們再強調一次hsqldb.jar的位置,因爲所有啓動命令都是參照hsqldb.jar的位置編寫的

  如果您覺得麻煩你也可以採用絕對路徑編寫命令。

  現在我們一起運行AWT版本的DatabaseManager工具,hsqldb.jar位於相對於當前路徑的../lib下面,命令如下:

  Java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager

  將命令保存爲後綴名爲bat的批處理文件,保存爲DatabaseManager.bat,也可根據個人習慣命名。執行DatabaseManager.bat你將看到如下畫面:。


         現在對這個簡潔的登錄界面做個簡單的介紹*_*

  • Recent:選擇你最近的登錄方案,[可選] 
  • Setting Name:本次登錄方案名稱,如果本次登錄成功,那麼等你下次登錄的時候在Recent下拉列表中將看到你的成功登錄方案[可選] 
  • Type:登錄模式,其中包括In-Memory模式、Standalone(In-process)模式、Server模式、WebServer模式... ...[必選] 
  • Driver:連接數據庫的驅動程序[必選] 
  • URL:連接數據庫的URL[必選] 
  • User:用戶名[必選] 
  • Password:密碼[ 除非密碼爲空]


  注:如果Type項選擇Server模式或者WebServer模式需要你事先啓動與之對應的服務模式。而Standalone(In- process)默認是不支持DatabaseManager連接的,具體原因我們已經在前面解釋過。至於In-Memory可以隨意登錄,所有的操作數 據都不會記錄在本地磁盤。而Type還有很多其他選項,具體的用法可以參考官方文檔,位置在hsqldb目錄/doc/guide/ guide.pdf。

  如果你想運行DatabaseManagerSwing也很簡單,相信你已經想到了。我們只需要把啓動DatabaseManager命令修改成:
  Java -cp ../lib/hsqldb.jar org.hsqldb.util. DatabaseManagerSwing

  兩種工具的操作方法類似,這裏就不再贅述。

        差點忘記,前面我說過要給出修改sa用戶密碼的方法。最後再佔用大家一點點時間。當你用SA通過DatabaseManager登錄成功後會出現如下界面:

      在右上方的空白區域輸入set password "newpassword" 點擊執行即可。

  到這裏我們對Hsqldb的簡單介紹就結束了。

  本文參考自Hsqldb的官方文檔,個人水平有限難免出現錯誤,

1.bmp
 描述:  
 文件大小:  483 KB
 看過的:  文件被下載或查看 1003 次

1.bmp
下載
2.bmp
 描述:  
 文件大小:  288 KB
 看過的:  文件被下載或查看 957 次

2.bmp
下載
 
發佈了37 篇原創文章 · 獲贊 0 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章