hsqldb使用


1 hsqldb介紹

  HyperSQL DataBase 是一個現代的關系數據庫管理軟件,比較徹底遵從SQL:2008標准和JDBC4規范。支持SQL:2008標准所以的核心特性和很多的可選特性。

HSQLDB-2.3版本,依照了SQL:2011標准進行了重寫。 遵從標准是HSQLDB最獨特的特點。

還提供了其他特色功能:

  HyperSQL能夠在用戶 應用進程中、一個應用服務器中、或作為一個獨立的服務器進程提供數據庫訪問。

         能夠完全地在內存中運行(使用極快的內存結構,而不是磁盤)

         能夠靈活地使用磁盤持久提供可靠的崩潰恢復

         是僅有的一個具備高性能專用大對象存儲系統(適用於GB級的大對象)的開源關系型數據庫管理系統

       還是僅有的一個關系型數據庫,支持創建和訪問逗號分割的大文件作為SQL表

         支持3個運行時可切換事務控制模型,包括完全多線程的多版本並發控制,適用於高性能的事務處理應用

       還適用於商業智能、ETL、其他處理大數據集的應用

         擁有廣泛的企業部署選項,如XA事務、連接池數據源、遠程認證

  

適用於數據庫應用的開發、測試、部署。

新的SQL語法兼容模型,已添加到HyperSQL中。這些模型允許與一些其他使用非標准SQL語法的數據庫系統高度兼容。

 

2 hsqldb.jar包中的組件

  RDBMS Engine 數據庫管理系統引擎

  JDBC Driver jdbc驅動

  Database Manager GUI 數據訪問工具

 

3 HyperSQL中的Database

在HyperSQL中,每個database被稱為catalog。

有3中類型的catalog(取決於database中的數據是如何存儲的)

  mem, 數據完全存儲在內存中,在JVM進程外沒有任何的持久。  用於數據測試、或作為應用的復雜的緩存

  file,    數據存儲在文件系統

  res,   存儲在一個Java資源中,如一個jar文件中(總是只讀的) 

 4 在進程內訪問數據庫

進程內訪問比較快,因為數據沒有轉換,也不用在網絡上發送。

缺點是,從應用的外部默認是不可能連接到數據庫的。因此,在應用運行時,你也就無法使用外部工具(如Database Manager GUI)來查看數據庫的內容。

 

通常格式:

  Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:mymendb", "SA", "");

  Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:test/testdb", "SA", ""); //相對目錄,相對於啟動JVM的shell命令的執行目錄

  Connection conn = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");

 

對數據庫做第一次進程內連接時,某些常規的數據結構會被初始化、一些幫助者線程將被創建。 在此之后,連接創建和對這些連接JDBC方法調用的執行,就好像是做這個調用的java應用的一部分一樣。

在SQL命令‘shutdown’執行后,數據庫的全局結構和幫助者線程將被銷毀。

 

5 服務運行模式 Server Modes

服務運行模式,提供了最大限度的可訪問性。

在JVM中運行的數據庫引擎,打開一個、或多個進程內catalogs。

它監聽來自在同一個computer或網絡上其他computer應用程序的連接,並轉換這些連接為到數據庫的進程內連接。

 

一些不同的應用程序(客戶端)都能夠連接到數據庫服務,檢索、更新信息,使用HyperSQL JDBC驅動。

在大多數server modes中,數據庫服務能夠服務不受限個數據庫(在數據庫服務啟動時指定,可選地,當接收到一個連接請求時)

 

在開發過程中,服務模式是運行數據庫的首選模型。在應用運行時,允許你從一個獨立的數據庫訪問工具查詢數據庫。

 

基於客戶端與數據庫服務通訊使用的協議,有3個服務模式:

  HSQL Server

    是運行一個數據庫服務的首選(最佳)方法,也是最快的一個。該模式使用一個私有的通訊協議。

    運行命令:

      hsqldb-2.3.2\data>java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb/mydb --dname.0 my

      啟動一個默認的數據庫(文件名:mydb/mydb, 公共名:my)

  

  HSQL HTTP Server

    該模式把數據庫服務限制為HTTP協議。使用該訪問方法的唯一原因是,客戶端、服務端防火牆的限制。在沒有該現在的場景中,不應該使用該模式。

    HyperSQL HTTP Server 是一個特定的web服務器,運行JDBC客戶端通過HTTP連接。該服務器同樣能夠作為一個靜態頁面的小型通用的Web服務器。

 

  HSQL HTTP Servlet

    使用HTTP協議。當一個獨立的servlet引擎(Tomcat, Resin)、或應用服務器,要提供對數據庫的訪問時使用。該模式從servlet引擎獨立啟動。

    在hsqldb.jar中的Servlet類應該被安裝到服務器中,以提供連接。使用一個應用服務器屬性指定數據庫文件的路徑

    該模式能夠服務多個數據庫(同時跑多個數據庫)

 

HTTP Server 和 HTTP Servlet 模式,在客戶端使用JDBC驅動都能夠訪問。沒有給數據庫提供一個Web前端。

 

6 連接到一個Database服務器

 

連接到 一個本地的 hsql server :

  Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/my", "SA", "");

 

連接到 一個本地的 http server :

  Connection conn = DriverManager.getConnection("jdbc:hsqldb:http://localhost/my", "SA", "");

 

 

7 測試例子

  

1)創建一個外部使用名為'my'的數據庫

 

2)使用hsqldb.jar管理數據庫

 

3)使用java查詢

    public static void main(String[] args) throws SQLException {
        
        try {
            Class.forName("org.hsqldb.jdbc.JDBCDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/my", "sa", "");
        
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select id, firstname, lastname from customer");
        
        while (rs.next()) {
            System.out.println("id: " + rs.getInt("id"));
            System.out.println("firstname: " + rs.getString("firstname"));
            System.out.println("lastname: " + rs.getString("lastname"));
        }
     rs.close();
     stmt.close();
     conn.close(); }
/* id: 1 firstname: Asn lastname: Judy */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM