2012-03-07 3 views
1

에서 시작합니다. 응용 프로그램 용 HSQLDB를 실행해야 할 때 명령 프롬프트에서해야하기 때문에 항상 Server.bat (배치 파일)를 두 번 클릭하여 서버를 시작합니다. 포함 :HSQLDB 문제 : HSQLDB를 Java 코드

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

또는 명령 프롬프트에서 start server 명령을 입력하십시오.

하지만 내 질문은 내가 직접 내 Java 코드에서 코딩하여 HSQL 데이터베이스 서버를 시작할 수 있으며 Java 응용 프로그램과 별도로 시작할 필요가 없다는 것입니다. 코드는 무엇입니까?

스프링 2.5, 스프링 보안 2.0.4 (주석 비활성화)를 사용 중입니다.

감사합니다.

답변

0

샘플 코드 같은 약. 간결함을 위해 수입품이 삭제되었습니다.

간단하게이 코드는 스레드 세이프가 아닙니다. 이것은 단지 샘플 코드 일뿐입니다.

또한 메모리 DB는 첫 번째 jdbc 요청을 수신하면 자동으로 시작됩니다. 또한 jdbc를 통해 SQL 명령 SHUTDOWN을 실행하여 메모리 DB를 종료하십시오.

org.hsqldb.server.WebServer (즉, hsql db 서버는 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; 
    } 

} 
관련 문제