HSQLDB
둘러보기로 가기
검색하러 가기
Java 기반의 DB인 HSQLDB를 정리 한다.
- 다운로드 : http://sourceforge.net/project/showfiles.php?group_id=23316
- 라이선스 : http://hsqldb.org/web/hsqlLicense.html
- 플랫폼 : Java
목차
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
<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" 를 사용함
- 인덱스는 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 (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