2012-03-07 74 views
1

啓動HSQL數據庫當我必須爲我的應用程序運行HSQLDB時,我必須從命令提示符執行它,所以我總是雙擊Server.bat(批處理文件)以啓動服務器包含:HSQLDB問題:從Java代碼

java -classpath ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.Server -database test 

或從命令提示符鍵入start server命令。

但是,我的問題是,我可以通過直接在我的java代碼中編碼來啓動HSQL數據庫服務器,不需要單獨從java應用程序啓動它?代碼是什麼?

請注意,我使用spring 2.5,spring seecurity 2.0.4(註釋禁用)。

謝謝。

回答

0

示例代碼來啓動和停止編程的HSQL網絡服務器。爲簡潔起見,刪除了進口。

保持簡單,這段代碼不是線程安全的。這只是示例代碼。

另請注意,內存數據庫將在接收到第一個jdbc請求時自動啓動。另外,通過jdbc執行SQL命令SHUTDOWN來關閉內存數據庫。

使用org.hsqldb.server.WebServer(即hsql數據庫服務器使用http端口80),但您可以改爲使用org.hsqldb.server.Server。您可以調用setPort來覆蓋默認端口。

public class HsqlServer { 

    /** 
    * Start the hsql server locally, with an HTTP interface. Rightclick on this 
    * class in Eclipse, and run. 
    * 
    * @param args 
    */ 

    private static WebServer ws; 

    public static void main(String args[]) { 
     new HsqlServer().startDB(); 
    } 

    public void stopDB() { 
     if (ws != null) { 
      try { 
       ws.checkRunning(true); 
       System.out.println("db is running. stopping now"); 
       stopServer2(); 
      } 
      catch(HsqlException hsqle) { 
       System.out.println("db is already stopped"); 
      } 
     } 
     else { 
      System.out.println("DB not started. it is null"); 
     } 
    } 

    private void stopServer2() { 
     ws.shutdownWithCatalogs(Database.CLOSEMODE_NORMAL); 
    } 

    public void startDB() { 
     // String[] argsToServer = { "--database.0", 
     // "file:" + HsqlServerConst.dbFileName, "-dbname.0", 
     // HsqlServerConst.dbName }; 
     // WebServer.main(argsToServer); 

     if (ws != null) { 
      try { 
       ws.checkRunning(false); 
       System.out.println("check running is false"); 
       startServer2(); 
      } catch (HsqlException hsqle) { 
       // already running. 
       System.out.println("Server is already running."); 
       return; 
      } 
     } else { 
      // start the server, it is null 
      System.out.println("server is null, starting now"); 
      startServer2(); 
     } 
    } 

    private WebServer startServer2() { 
     ws = new WebServer(); 
     ws.setDatabasePath(0, "file:" + HsqlServerConst.dbFileName); 
     ws.setDatabaseName(0, HsqlServerConst.dbName); 
     ws.start(); 
     return ws; 
    } 

}