HSQLDB

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

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


  • "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

<resource-ref>

   <description>DB Connection</description>
   <res-ref-name>jdbc/mysql</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>

</resource-ref>

  • $WebContent/WEB-INF/context.xml에서 php.ini 파일 등을 지정 한다.

<Context>

   <Resource driverClassName="com.mysql.jdbc.Driver" 
       maxActive="4" maxIdle="2" maxWait="5000" auth="Container" 
       name="jdbc/mysql" password="" type="javax.sql.DataSource" 
       url="jdbc:mysql://localhost:3306/customer" username="root"/>

</Context>

사용자 가이드

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" 를 사용함
  • 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 (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

참고 문헌