【ハウツー】
2010年6月、Pure JavaデータベースHSQLDBの最新版となるHyperSQL 2.0がリリースされた。前バージョンとなるHSQLDB 1.8のリリースから実に5年の開発期間を経てリリースされたことになる。コードは大幅な書き換えが行われ、コア部分は完全にマルチスレッドで動作するようになった。
また、2フェーズロック、MVCC(多重バージョン並行処理制御)をサポートし、トランザクション制御レベルとして従来サポートされていたSERIALIZABLEとREAD COMMITTEDに加えてREPEATABLE READとREAD UNCOMMITTEDが新たに追加されている。
それでは実際にHyperSQLを動かしてみよう。
ダウンロードしたディストリビューションのhsqldb/binディレクトリに格納されているrunManager.batをダブルクリックしてみよう。以下のような管理ツールが起動するはずだ(runManagerSwing.batでSwingベースの管理ツールを利用することもできる)。
HyperSQLにはいくつかの起動モードがあるが、デフォルトではURLに「jdbc:hsqldb:mem:.」と表示されているが、このまま接続するとインメモリモード(メモリ上にしかデータを持たないためプロセスを終了するとデータも消えてしまう)で使用できる。
まずは管理ツール上からCREATE文や任意のSQLを発行して動作を確認してみてほしい。
HyperSQLには以下のようなモードがある。一時的なデータの格納であればインメモリモード、スタンドアロンアプリケーションに組み込むのであればスタンドアロンモード、Webアプリケーションであればサーバモードなど、用途に応じて使い分けよう。
| モード | 接続URL | 説明 |
|---|---|---|
| インメモリ | jdbc:hsqldb:mem:. | データをメモリ上にのみ保持する。プロセスを終了するとデータも消えてしまう |
| スタンドアロン | jdbc:hsqldb:file:<path> | ファイルを直接読み書きするモード。組み込み用途などサーバを起動する必要がない場合に使用する |
| サーバ | jdbc:hsqldb:hsql://<hostname>/ | 通常のRDBMSのようにサーバプロセスとして実行。通常のデータベースサーバと同様の用途で使用する |
| Webサーバ | jdbc:hsqldb:http://<hostname>/? | HTTPで通信を行うサーバプロセスとして実行。ファイアウォールを越える必要がある場合などに使用する |
| サーブレット | jdbc:hsqldb:http://<hostname>/? | Webサーバモードと同様だが、サーバプロセスを起動する代わりにサーブレットエンジンを利用できる |
hsqldb/binディレクトリに格納されているrunServer.batでサーバモード、runWebServer.batでWebサーバモードで起動することが可能だ。インメモリモードとスタンドアロンモードはサーバを起動する必要はない。
また、以下のようにコマンドラインからサーバの起動クラスを直接指定して起動することも可能だ。
// サーバモードで起動
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
// Webサーバモードで起動
java -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 file:mydb --dbname.0 xdb
HyperSQLに接続するJavaプログラムは以下のようになる(例外処理などは省いているので注意してほしい)。実行時にはJDBCドライバとしてhsqldb.jarをクラスパスに追加しておく必要がある。また、接続URLはHyperSQLのモードに応じて変更してほしい。
Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/", "SA", "");
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM USER_INFO");
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Integer userId = rs.getInt("USER_ID");
String firstName = rs.getString("FIRST_NAME");
String lastName = rs.getString("LAST_NAME");
System.out.println(String.format("%d: %s %s", userId, firstName, lastName));
}
rs.close();
stmt.close();
conn.close();
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
[観月ありさ]濃姫役で戦国時代劇初挑戦 信長役は城田優 SPドラマ「濃姫」 [05:00 2/11] エンタメ |
|
【レポート】秋葉原アイテム巡り - 『幻想水滸伝』シリーズ最新作や『GRAVITY DAZE』が発売! 冬アニメ注目のOP・EDテーマも続々リリース [05:00 2/11] ホビー |
|
激シブ!もう一度ゴルフ Ⅱ の魅力を味わってみませんか?【大阪オートメッセ2012】 [03:06 2/11] キャリア |
|
『ヘタリア』キャラソン、新シリーズが配信決定! [03:05 2/11] キャリア |
|
全国の温泉を擬人化したドラマCD、第1弾「草津」は櫻井孝宏さん! [03:05 2/11] キャリア |