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:<ローカルのパス>
にすれば、スタンドアロンモードで利用できる。
参考