상단

Java 기반의 DB인 HSQLDB를 정리 한다.

 

HSQLDB 환경 설정


Jetty에서 Java 기반의RDBMS인 HSQLDB를 사용하여 RDBMS 개발 환경을 구성해 보자.

  • 환경 변수 정의

  • $JETTY_HOME : Jetty가 설치된 폴더

  • $JETTY_WEB_ROOT : Web Application 배포된 Root 폴더, $JETTY_HOME/webapps/test/

  • http://localhost:8080/ : $JETTY_WEB_ROOT 에 브라우저로 접속하는 URL

 

  • HSQLDB 사이트에서 상단의 download 링크를 클릭 한다.

  • "Download Now!" 버튼을 클릭하여 hsqldb-2.0.0-rc9.zip 파일을 다운로드 한다.

    • 압축을 풀어 hsqldb.jar를 $JETTY_WEB_ROOT/WEB-INF/lib/ 폴더에 복사 한다.

     
  • HSQLDB 관리를 위해 $JETTY_HOME/startHsqldbManager.cmd 파일을 다음과 같이 생성 한다.

    • startHsqldbManager.cmd 를 실행하면 관리자용 GUI가 실행된다.

 
 @echo off
 set JAVA_HOME=../java
 set PATH=../java/bin;%PATH%
 
 java -classpath webapps/test/WEB-INF/lib/hsqldb.jar org.hsqldb.util.DatabaseManager
 rem pause
 

- $WebContent/WEB-INF/web.xml ``` DB Connection jdbc/mysql javax.sql.DataSource Container ```
  • $WebContent/WEB-INF/context.xml에서 php.ini 파일 등을 지정 한다.

 
``` ```

사용자 가이드


 

Server 모드 설정

Server 모드는 독립된 서버 프로세스로 실행하는 것으로 로컬 또는 원격지에서 HSQLDB에 접근할 수 있다.

 
  • HSQLDB 관리를 위한 GUI 도구

 
 java -classpath hsqldb.jar org.hsqldb.util.DatabaseManager
 
  • HSQLDB 실행

 
 java -classpath hsqldb.jar org.hsqldb.Server
 
  • HSQLDB 종료

    • DataManager에서 "shutdown" query를 실행

     
  • HSQLDB 설정 파일

    • server.properties

     
  • HSQLDB에서 Database Server 실행

 
 java -classpath hsqldb.jar org.hsqldb.Server -database.0 file:data/test -dbname.0 testUrl
  • Default Port : 9001

  • -database.0 file:data/test : 데이터베이스가 사용할 경로와 파일명 형식(test.*)을 명시

    • data라는 폴더에 test.* 파일이 생성됨

  • -dbname.0 testUrl : 데이터베이스의 alias를 지정. alias는 애플리케이션에서 jdbc를 통해 hsqldb에 접근할 때 사용

    • url로 "jdbc:hsqldb:hsql://localhost/testUrl" 를 사용함

  • 인덱스는 0에서 9까지 사용 가능 (예, -database.3)

  • -port 9001

  • 참고 문헌 : http://www.hsqldb.org/doc/src/org/hsqldb/server/Server.html

  • HSQLDB 접속

 
 Class.forName("org.hsqldb.jdbc.JDBCDriver");
 
 Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testUrl", "SA", "");
 
  • server.properties

 
 ### ============================================================================
 ###     프로그램 명     	: server.properties ver 0.00.001
 ###     프로그램 설명   	: HSQLDB Server를 위한 설정
 ###     작성자              	: 산사랑 (pnuskgh(골뱅이)gmail.com)
 ###     작성일              	: 2013.12.12 ~ 2013.12.12
 ### --- [관리](History) ---------------------------------------------------------
 ###     수정자             	:
 ###     수정일             	:
 ###     수정 내용        	:
 ### --- [Copyright](Copyright.md) ------------------------------------------------------------
 ###     Copyright (c) 1995~2013 pnuskgh, 오픈소스 비즈니스 컨설팅
 ###     All rights reserved.
 ### ============================================================================ 
 
 ### ----------------------------------------------------------------------------
 ###     HSQLDB Server 기본 설정
 ###         server.port         : Port, Default port는 9001
 ###			server.database.0   : 0번째 데이터베이스 이름 (0, 1, 2, ..., 9)
 ###			server.dbname.0     : 0번째 데이터베이스에 접속하기 위해 사용하는 이름
 ###             conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/${server.dbname.0}", "SA", "");
 ###			server.silent       : true. 콘솔에 다양한 메시지 출력
 ### ----------------------------------------------------------------------------
 server.port=9002
 server.database.0=/nas/database/hadoop
 server.dbname.0=hadoop
 server.silent=true
 
 ### ============================================================================
 

In-process 모드 설정

In-process 모드는 HSQLDB를 애플리케이션과 동일한 프로세스에서 HSQLDB를 실행하는 모드로 자체 DB를 필요로 하는 어플리케이션이나 캐시와 같은 임시 데이터를 처리하는 데 이용 한다.
 
In-process 모드는 메모리에 DB를 저장할 수 있고 또는 File 형태로 DB를 저장할 수 있다.

 
  • HSQLDB 관리를 위한 GUI 도구

 
 java -classpath hsqldb.jar org.hsqldb.util.DatabaseManager
 
  • HSQLDB 설정 파일

    • server.properties

     
  • HSQLDB 접속

 
 Class.forName("org.hsqldb.jdbc.JDBCDriver");
 
 Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");
 Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");
 

관리자 가이드


관리용 SQL

  • 테이블 목록 보기

 
 select *
   from information_schema.system_tables
  where table_type = 'TABLE'
 
 select * 
   from information_schema.tables
  where table_type != 'VIEW';
 

hsql.bash

 #!/usr/bin/env bash
 ### ----------------------------------------------------------------------------
 ###     funcUsing()
 ###                     사용법 표시
 ###         hsql.bash help
 ###         hsql.bash start              #--- 모든 DB startup
 ###         hsql.bash stop default       #--- default DB shutdown
 ###         hsql.bash console default    #--- default DB에 접속
 ###         hsql.bash console default -e "select * from aaa"
 ###         hsql.bash console default -f ~.sql
 ###         TODO : status, version
 ### ----------------------------------------------------------------------------
 
 #--- 코드 생략
 
 case "$PROGRAM" in
     help)
         funcHelp
         ${JAVA_HOME}/bin/java -classpath ${HSQLDB_CLASSPATH} org.hsqldb.Server --help
         ;;
     start)
         cd ${HSQLDB_HOME}/logs
         nohup ${JAVA_HOME}/bin/java ${JAVA_OPTS} -classpath ${HSQLDB_CLASSPATH} \
             org.hsqldb.Server --props ${HSQLDB_HOME}/conf/server.properties ${ARGS} &
         ;;
     status)
         ps -ef | grep org.hsqldb.Server | grep -v grep
         ;;
     stop)
         if ["${ARGS}" == "" ](); then
             echo "Please run next commands"
             for line in `/bin/grep server.dbname ${HSQLDB_HOME}/conf/server.properties | /bin/grep -v "#"`; do
                 line=`echo $line | sed -e 's/server.dbname.0=//g'`
                 line=`echo $line | sed -e 's/server.dbname.1=//g'`
                 line=`echo $line | sed -e 's/server.dbname.2=//g'`
                 line=`echo $line | sed -e 's/server.dbname.3=//g'`
                 line=`echo $line | sed -e 's/server.dbname.4=//g'`
                 line=`echo $line | sed -e 's/server.dbname.5=//g'`
                 line=`echo $line | sed -e 's/server.dbname.6=//g'`
                 line=`echo $line | sed -e 's/server.dbname.7=//g'`
                 line=`echo $line | sed -e 's/server.dbname.8=//g'`
                 line=`echo $line | sed -e 's/server.dbname.9=//g'`
                 line=`echo $line`
                 echo "    hsql.bash stop" $line
             done
         else
             ${EXEC} ${JAVA_HOME}/bin/java ${JAVA_OPTS} -classpath ${HSQLDB_CLASSPATH} \
                 -jar ${HSQLDB_HOME}/lib/sqltool.jar \
                 --rcFile=${HSQLDB_HOME}/conf/sqltool.rc --sql="shutdown;" ${ARGS}
         fi
         ;;
     console)
         if [-n "${SQL_STR}" ](); then
             ${EXEC} ${JAVA_HOME}/bin/java ${JAVA_OPTS} -classpath ${HSQLDB_CLASSPATH} \
                 -jar ${HSQLDB_HOME}/lib/sqltool.jar \
                 --rcFile=${HSQLDB_HOME}/conf/sqltool.rc --sql="${SQL_STR}" ${ARGS}
         elif [-n "${SQL_FILE}" ](); then
             ${EXEC} ${JAVA_HOME}/bin/java ${JAVA_OPTS} -classpath ${HSQLDB_CLASSPATH} \
                 -jar ${HSQLDB_HOME}/lib/sqltool.jar \
                 --rcFile=${HSQLDB_HOME}/conf/sqltool.rc ${ARGS} ${HSQLDB_HOME}/sql/${SQL_FILE}
         else
             ${EXEC} ${JAVA_HOME}/bin/java ${JAVA_OPTS} -classpath ${HSQLDB_CLASSPATH} \
                 -jar ${HSQLDB_HOME}/lib/sqltool.jar \
                 --rcFile=${HSQLDB_HOME}/conf/sqltool.rc ${ARGS}
         fi
         ;;
     version)
         /bin/grep 'HSQLDB server' ${HSQLDB_HOME}/logs/nohup.out | /bin/awk '{print $4, $5, $6, $10, $11}' | /usr/bin/tail -1
         ;;
 esac
 exit 0
 

server.properties

 server.port=9003
 server.silent=true
 
 server.database.0=file:/nas/appl/hsqldb/database/default
 server.dbname.0=default
 
 server.database.1=file:/nas/appl/hsqldb/database/hadoop
 server.dbname.1=hadoop
 

sqltools.rc

 urlid default
 url jdbc:hsqldb:hsql://node201.hadoop.com:9003/default
 username SA
 password
 
 urlid hadoop
 url jdbc:hsqldb:hsql://node201.hadoop.com:9003/hadoop
 username SA
 password
 

참고 문헌


 
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :