web應用程序啓動時啓動HSQLDB

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author zhoudong
* @Created on 2005-2-1
* @email:[email protected]
*/
public class HSQLDBServletContextListener implements ServletContextListener {
    /*
     * (non-Javadoc)
     *
     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent evt) {
        try {
            ServletContext context = evt.getServletContext();
            String params = "port=9001;silent=true;trace=false;database.0="
                    + context.getRealPath("/") + "/WEB-INF/tm/hsqldb/tmdb";
            org.hsqldb.Server server = new org.hsqldb.Server();
            server.putPropertiesFromString(params);
            server.setLogWriter(null);
            server.setErrWriter(null);
            server.start();
        } catch (Exception e) {
            System.err.println(e);
        }
    }
    /*
     * (non-Javadoc)
     *
     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        Connection conn = null;
        try {
            Class.forName("org.hsqldb.jdbcDriver");
            conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001",
                    "sa", "");
            Statement stmt = conn.createStatement();
            stmt.executeUpdate("SHUTDOWN;");
            stmt.close();
        } catch (Exception e) {
            //
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
                //
            }
        }
    }
    public static void main(String[] args) {
    }
}

工程的web.xml加上這個listener就可以了。

一、簡介:
hsql數據庫是一款純Java編寫的免費數據庫,許可是BSD-style的協議,如果你是使用Java編程的話,不凡考慮一下使用它,相對其他數據庫 來說,其體積小,才563kb。僅一個hsqldb.jar文件就包括了數據庫引擎,數據庫驅動,還有其他用戶界面操作等內容。在Java開源世界裏, hsql是極爲受歡迎的(就Java本身來說),JBoss應用程序服務器默認也提供了這個數據庫引擎。由於其體積小的原因,又是純Java設計,又支持 SQL99,SQL2003大部分的標準,所以也是作爲商業應用程序展示的一種選擇。請到以下地址下載hsql: http://prdownloads.sourceforge.net/hsqldb/hsqldb_1_7_3_3.zip?download

二、使用hsql數據庫:
1、hsql數據庫引擎有幾種服務器模式:常用的Server模式、WebServer模式、Servlet模式、Standlone模式、Memory-Only數據庫。
2、最爲常用的Server模式:
1)首先卻換到lib文件夾下,運行java -cp hsqldb.jar org.hsqldb.Server -database.0 db/mydb -dbname.0 xdb
執行命令後,將會在db文件夾下創建一個數據庫mydb,別名(用於訪問數據庫)是xdb,如果存在mydb數據庫,將會打開它。
2)運行數據庫界面操作工具:java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
在Type選項裏選上相應的服務器模式,這裏選擇HSQL Database Engine Server模式;Driver不用修改;URL修改爲jdbc:hsqldb:hsql://localhost/xdb (主要這裏xdb就是上面我們設置的別名);user裏設置用戶名,第一次登錄時,設置的是管理員的用戶名,password設置密碼。然後點擊Ok。
3)第一次運行數據庫引擎,創建數據庫完畢。好了,你可以打開db文件夾,會發現裏面多了幾個文件。
mydb.properties文件:是關於數據庫的屬性文件。
mydb.script:hsql主要保存的表(這裏按hsql的說法是Memory表,就是最爲常用的),裏面的格式都是文本格式,可以用文本查看,裏面的語句都是sql語句,熟悉sql語句的話,你也可以手動修改它。每次運行數據庫引擎的話都是從這裏加載進內存的。
mydb.lck表示數據庫處於打開狀態。
其他的請參看hsqldb包裏的手冊。

3、WebServer模式和Server運行模式基本一樣,只是支持了Http等協議,主要用於防火牆,默認端口是9001。啓動Server,java -cp hsqldb.jar org.hsqldb.WebServer ...剩餘的和上面的一致。

4、Servlet模式可以允許你通過Servlet容器來訪問數據庫,請查看hsqlServlet.java的源代碼,和WebServer類似。

5、另一個值得思考的模式是Standalone模式:不能通過網絡來訪問數據庫,主要是在一個JVM中使用,那樣的話,訪問的速度會更加快。雖然 文檔裏面提到主要是用於開發時使用,但是我們可以假設一下,該方法不需要一個引擎類的東西,而類似於打開文件的方式,返回一個Connection對象:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:mydb", "sa", "");
將會在當前目錄找到mydb數據庫相關文件,打開並返回一個Connection對象。該方式有點好處就是可以不使用引擎,在需要的時候操作數據。所以那 些對數據庫不是特別有要求的,但又需要一個操作數據庫的方式的話,可以使用這種方法。對於那些不想額外在數據庫引擎花費金錢的話,可以使用這種方法。但是 不推薦使用該方法。記得Hibernate裏SessionFactory可以使用openSession(Connecttion c)來獲得一個Session對象的,因此,在測試或者實際應用的話都可以這樣使用。

6、Memory-Only 數據庫:顧名思義,主要是內存中使用,不用於保存數據。可以用於在內存中交換數據。

三、具體的鏈接與操作的話,和一般的JDBC操作一樣。而相應的Server模式的話,連接地址主要你運行數據庫界面操作工具時,在URL一欄時默認已經設好了,自己實習一下,對比其中參數。

這篇文章介紹大致內容很詳細,不過也大都是從Hsql的幫助上翻譯的,我有必要加入點新鮮的血液。
這篇文章美中不足的是缺少實戰性,往往初學者第一步都走不出來,比如我。
我在實踐中遇到的問題是打開數據庫管理器怎麼也連接不上數據庫,總是說
java.sql.sqlException Socket create error
搞了一個晚上,到第二天早上清醒一下,想起來這個數據庫應該在創建庫之後,保持那個cmd窗口,在此過程中連接。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章