Java
HSQLDB

HSQLDB使い方メモ

More than 3 years have passed since last update.

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'

http://search.maven.org/#search|gav|1|g%3A%22org.hsqldb%22%20AND%20a%3A%22hsqldb%22


サーバモードで起動して 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

「Type」で HSQL Database Engine Server を選択して、「Ok」を選択。

DatabaseManagerのConnect.jpg


テーブルを作成する

次の SQL を実行する。


TEST_TABLE作成DDL

CREATE TABLE TEST_TABLE (

ID INTEGER NOT NULL IDENTITY,
VALUE VARCHAR(256)
)

テーブルの作成.jpg

「View」の「Refresh Tree」を選択したら、左のツリーに作成した TEST_TABLE が表示される。

TEST_TABLEが追加されている様子.jpg


データの挿入


テストデータ

INSERT INTO TEST_TABLE (VALUE) VALUES ('HOGE');

INSERT INTO TEST_TABLE (VALUE) VALUES ('FUGA');
INSERT INTO TEST_TABLE (VALUE) VALUES ('PIYO');

テストデータの挿入結果確認.jpg


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

参考


参考