HSQLDB の使い方メモ。
#環境
##OS
Windows7 64bit
##Java
1.7.0_25
##HSQLDB
2.3.0
#ダウンロード
ここ から欲しいバージョンの zip をダウンロード。
zip を展開してできる hsqldb-x.x.x/hsqldb
フォルダのパスを %HSQLDB_HOME%
とする。
Gradle を使っている場合は以下の依存関係を設定。
compile 'org.hsqldb:hsqldb:2.3.2'
#サーバモードで起動して DatabaseManager で接続する
コマンドプロンプトを開き、サーバーモードで HSQLDB を起動する。
>cd /d %HSQLDB_HOME%\lib
>java -cp hsqldb.jar org.hsqldb.Server -database db/test
HSQLDB が起動して、 %HSQLDB_HOME%\lib\db\test
にデータベースのファイル類が生成される。
##DatabaseManager で接続する
コマンドプロンプトから DatabaseManager を起動する。
>cd /d %HSQLDB_HOME%\lib
>java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
※v2.6.0 以降は org.hsqldb.util.DatabaseManagerSwing
を使用する。
The DatabaseManager class is no longer included in the Jars. Use DatabaseManagerSwing instead.
「Type」で HSQL Database Engine Server
を選択して、「Ok」を選択。
##テーブルを作成する
次の SQL を実行する。
CREATE TABLE TEST_TABLE (
ID INTEGER NOT NULL IDENTITY,
VALUE VARCHAR(256)
)
「View」の「Refresh Tree」を選択したら、左のツリーに作成した TEST_TABLE
が表示される。
##データの挿入
INSERT INTO TEST_TABLE (VALUE) VALUES ('HOGE');
INSERT INTO TEST_TABLE (VALUE) VALUES ('FUGA');
INSERT INTO TEST_TABLE (VALUE) VALUES ('PIYO');
#プログラムから DB に接続する
上で作った test データベースにプログラムから接続する。
##jar の追加
%HSQLDB_HOME%\lib\hsqldb.jar
をクラスパスに追加する。
##実装
JDBC ドライバは「org.hsqldb.jdbcDriver
」、URL は「jdbc:hsqldb:file:<DBフォルダのパス>/<DB名>
」を指定。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
String dbDir = "%HSQLDB_HOME%/lib/db/test";
Class.forName("org.hsqldb.jdbcDriver");
String url = "jdbc:hsqldb:file:" + dbDir;
String user = "sa";
String password = "";
Connection con = DriverManager.getConnection(url, user, password);
Statement stat = con.createStatement();
stat.execute("SELECT * FROM TEST_TABLE");
ResultSet rs = stat.getResultSet();
while (rs.next()) {
int id = rs.getInt("ID");
String value = rs.getString("VALUE");
System.out.println(String.format("ID=%d, VALUE=%s", id, value));
}
rs.close();
stat.close();
con.close();
}
}
ID=0, VALUE=HOGE
ID=1, VALUE=FUGA
ID=2, VALUE=PIYO
#インメモリモードで使用する
データをメモリ上に保存する方法。
当然 JVM が終了したらデータは消えるが、サンプルアプリとかで動作確認が目的で、別に永続化が必要ないときとかは便利だと思う。
package sample.hsqldb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class InMemorySample {
public static void main(String[] args) throws Exception {
// JDBC ドライバロード
Class.forName("org.hsqldb.jdbcDriver");
// データベースに接続
Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:test", "sa", "");
// テーブル作成
Statement st = connection.createStatement();
st.executeUpdate("CREATE TABLE TEST_TABLE (ID INTEGER, VALUE VARCHAR(10))");
// データ挿入
st.executeUpdate("INSERT INTO TEST_TABLE VALUES (1, 'HOGE')");
st.executeUpdate("INSERT INTO TEST_TABLE VALUES (2, 'FUGA')");
// データ取得
ResultSet rs = st.executeQuery("SELECT * FROM TEST_TABLE");
while (rs.next()) {
System.out.println("ID=" + rs.getInt("ID") + ", VALUE=" + rs.getString("VALUE"));
}
st.close();
connection.close();
}
}
#スタンドアロンモードで利用する
サーバは立ち上げず、組み込みで DB を起動する。
データはファイルに保存させる。
package sample.hsqldb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
// JDBC ドライバロード
Class.forName("org.hsqldb.jdbcDriver");
// データベースに接続
Connection connection = DriverManager.getConnection("jdbc:hsqldb:file:testdb/testdb;shutdown=true", "SA", "");
// テーブル作成
Statement st = connection.createStatement();
st.executeUpdate("CREATE TABLE TEST_TABLE (ID INTEGER, VALUE VARCHAR(10))");
// データ挿入
st.executeUpdate("INSERT INTO TEST_TABLE VALUES (1, 'HOGE')");
st.executeUpdate("INSERT INTO TEST_TABLE VALUES (2, 'FUGA')");
// データ取得
ResultSet rs = st.executeQuery("SELECT * FROM TEST_TABLE");
while (rs.next()) {
System.out.println("ID=" + rs.getInt("ID") + ", VALUE=" + rs.getString("VALUE"));
}
st.close();
connection.close();
}
}
URL を jdbc:hsqldb:file:<ローカルのパス>
にすれば、スタンドアロンモードで利用できる。
参考
#参考