HSQLDB學習(2)

 
Server模式

Server模式提供了最大的可訪問性。在這種模式下,數據庫引擎運行在一個JVM中,並且監聽同一臺機器上或網絡上其他機器上程序的連接。幾個不同的程序可以連接到服務並且取得和更新信息。應用程序通過HSQLDB JDBC驅動連接數據庫。

根據客戶端和服務器通信的協議不同,Server模式可以分爲以下三種:

Hsqldb Server:
這種模式是首選的並且是最快的。它使用hsqldb私有的通信協議。啓動數據庫的命令和上面的啓動工具的命令差不多,以下就是一個例子,它將啓動一個文件名爲"mydb.*"的數據庫服務。

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

-?可以用來察看可用的參數。

Hsqldb Web Server:
當只能通過HTTP協議訪問數據庫所在機器的時候,這種模式就可以被使用了。使用Web Server模式的唯一原因就是穿過客戶端和服務器之間的防火牆,其他情況下最好不要使用。HSQLDB Web Server是一個特殊的web服務,允許JDBC客戶端通過HTTP協議訪問。從1.7.2版本開始,這種模式也開始支持事務。
運行這種模式的服務,只要將上面例子中的主類替換爲:org.hsqldb.WebServer就可以了。

Hsqldb Servlet:
這種模式使用同Web Server同樣的協議。在諸如Tomcat或Resin等servlet引擎提供數據庫訪問的時候,這種模式就可以使用了。Servlet模式不能脫離了servlet引擎而單獨運行。hsqldb.jar中的hsqlServlet類應該被放置在應用服務器中提供數據庫連接。數據庫通過應用服務的屬性指定,可以察看hsqlServlet.java獲得更詳細的信息。
Servlet模式只能提供一個數據庫。


連接一個作爲服務運行的數據庫
一旦一個HSQLDB服務運行起來,客戶端代就可以通過HSQLDB JDBC驅動來連接它。如何連接一個數據庫服務在jdbcConnection的javadoc中有詳細的說明。下面是一個普通的例子:

try {
       Class.forName("org.hsqldb.jdbcDriver" );
   } catch (Exception e) {
       System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
       e.printStackTrace();
       return;
   }

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

在有些環境下,你需要用下面的語句來得到驅動:

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

注意,上面的URL中沒有提及數據庫的具體文件,因爲它們是在啓動時指定好的。


In-Process(Standalone)模式
這種模式將數據庫引擎作爲你應用程序的一部分運行在同一個JVM中。在一些程序中這種模式要快得多,因爲數據不需要修改以及通過網絡傳輸。主要的缺點是不能從你的應用程序外部連接數據庫了,這樣的結果就是在應用程序運行的時候,你不能使用一個外部的工具來察看你數據庫中的數據。在1.7.2版本中,你可以在同一個JVM中開一個獨立的線程來運行服務器實例,這樣就可以從外部訪問你的in-process數據庫了。

建議在開發應用程序的時候使用HSQLDB服務器實例,而在部署的時候切換到In-Process模式。

一個In-Process模式的數據庫是從JDBC語句啓動的,把文件的路徑作爲URL的一部分。舉例來說,如果數據庫的名字叫作testdb,啓動應用程序的命令(cmd)運行的目錄和數據庫文件的目錄是同一個目錄,下面的語句就是啓動這個數據庫並得到連接:

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

數據庫文件路徑的分割符使用斜槓("/"),Windows和Linux都可以。所以相對路徑或者同一個驅動器下的目錄路徑在兩種操作系統上都是一樣的。

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

當使用相對路徑的時候,這些路徑將會從啓動JVM的目錄開始計算,從jdbcConnection的Javadoc中獲得更多的信息。


Memory-Only數據庫
HSQLDB還可以運行在內存中,數據不持久化而是全部在內存中。因爲沒有任何信息寫在磁盤上,所以這種模式只能用於處理應用數據,比如applet或其他的一些應用中。這種模式通過mem:協議來指定:

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



關閉數據庫
任何模式的數據庫都可以通過一個SQL命令:SHUTDOWN來關閉。在1.7.2版本中,當所有連接都被顯式地關閉之後,in-process模式的數據庫還是不會被關閉,除非有SHUTDOWN命令。當SHUTDOWN命令發出,所有的active事務都會被rollback。


創建一個新的數據庫
當一個數據庫實例啓動(也就是cmd命令執行時),或者創建一個in-process模式數據庫連接的時候,如果指定的路徑沒有數據庫存在,那麼就會創建一個新的空的數據庫。
所以如果你不想這種情況發生,你可以在增加一個connection屬性ifexists=true來檢查是否存在這樣一個數據庫,不存在的話就會拋出異常。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章