H2 Database Engine (以降本書中ではH2DBと記載します) のWindwos環境下におけるインストールから、サーバモードでの起動方法、お使いのデータベース開発支援ツールとの接続方法(ODBC使用)までをまとめておきます。
インストール手順
- H2DBのサイトから「Windows Installer」をダウンロードする。(「h2-setup-yyyy-mm-dd.exe」のようなファイルがダウンロードされる)
2.インストール
ダウンロードした「h2-setup-yyyy-mm-dd.exe」ファイルを実行しインストール。
「次へ」「インストール」なにも変更しない場合は、2~3ステップで完了。
デフォルトで「C:\Program Files (x86)\H2」にインストールされます。
H2DBをサーバモードで起動する
H2DBに接続する方法は
- 組込(Embedded)モード:ローカルのDBファイルに直接アクセスします。
- サーバモード:DBサーバとして起動するモード。
という種類があり、組込モードはインストール後、何も設定、起動せずにそのまま使用できます。
たとえば、jdbcでsampleというDBに接続するサンプルは以下の通り
jdbc:h2:[file:]~/sample
チルダ(~)はホームディレクトリを示し(Windows7以降は「C:\Users\ユーザ名」)、これでホームディレクトリ配下にsampleというDBファイルが作成されます。
組み込みモードでは複数のアプリケーションから同時接続できない。
組込モードを使用すると例えばIDE環境で接続して試しながら、データベース(SQL)開発支援ツールなど別のアプリで接続しようとすると、以下のようなエラーに遭遇します。
org.h2.jdbc.JdbcSQLException: データベースが使用中です: "...". 可能な解決策: 他の接続を全て閉じる; サーバモードを使う
問題は、エラーに記載されている内容の通りで、組込モードでは複数のアプリから同時に使用することができません。
解決策の1つとして、エラーに記載されている解決策 サーバーモード があります。
サーバーモードで起動する
準備
H2DBのbin直下にあるh2.batをコピーしてサーバーモード用に編集します。(以下はコピーして名前をh2-server.batにしました。)
内容を
@java -cp "h2-1.4.196.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %*
@if errorlevel 1 pause
から
@set AS_JAVA=C:\PROGRA~1\Java\jdk1.8.0_151
@set JAVA="%AS_JAVA%\bin\java"
@set H2=C:\PROGRA~2\H2\bin\h2-1.4.196.jar
@java -cp "%H2%;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server %*
@if errorlevel 1 pause
に編集します。
(※JDK1.8.0.151の64bit版をインストールしている前提です。)
実行
編集したバッチファイル(h2-server.bat)を実行します。以下は、実行直後に表示されるコマンドプロンプトです。
このバッチ(org.h2.tools.Server)は、ダブルクリックで実行できますが
h2-server.bat -tcpAllowOthers
など、いくつかのオプションを追加することも可能です。
(-tcpAllowOthersは、後述に記載していますが、tcp(サーバーモードの接続方法)での接続を外部端末からでもアクセスできるように許可します。
また、コマンドプロンプト上に3行表示されているのが確認できると思いますが、サーバーモード(org.h2.tools.Server)をオプションなしで実行した場合
- サーバーモード(tcpサーバ)
- PostgreSQLサーバ
- webサーバ
の3つのサーバが同時に起動します。
以下は、起動時にコマンドプロンプトと同時にブラウザに表示されるwebサーバのトップ画面です。
[付録]オプション
サーバモード起動時に、次のようなオプションを指定することが可能です。
>java -cp "%H2%;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server -?
Starts the H2 Console (web-) server, TCP, and PG server.
Usage: java org.h2.tools.Server <options>
When running without options, -tcp, -web, -browser and -pg are started.
Options are case sensitive. Supported options are:
[-help] or [-?] Print the list of options
[-web] Start the web server with the H2 Console
[-webAllowOthers] Allow other computers to connect - see below
[-webDaemon] Use a daemon thread
[-webPort <port>] The port (default: 8082)
[-webSSL] Use encrypted (HTTPS) connections
[-browser] Start a browser connecting to the web server
[-tcp] Start the TCP server
[-tcpAllowOthers] Allow other computers to connect - see below
[-tcpDaemon] Use a daemon thread
[-tcpPort <port>] The port (default: 9092)
[-tcpSSL] Use encrypted (SSL) connections
[-tcpPassword <pwd>] The password for shutting down a TCP server
[-tcpShutdown "<url>"] Stop the TCP server; example: tcp://localhost
[-tcpShutdownForce] Do not wait until all connections are closed
[-pg] Start the PG server
[-pgAllowOthers] Allow other computers to connect - see below
[-pgDaemon] Use a daemon thread
[-pgPort <port>] The port (default: 5435)
[-properties "<dir>"] Server properties (default: ~, disable: null)
[-baseDir <dir>] The base directory for H2 databases (all servers)
[-ifExists] Only existing databases may be opened (all servers)
[-trace] Print additional trace information (all servers)
[-key <from> <to>] Allows to map a database name to another (all servers)
The options -xAllowOthers are potentially risky.
For details, see Advanced Topics / Protection against Remote Access.
See also http://h2database.com/javadoc/org/h2/tools/Server.html
記載の通り、プログラム中で使用したい場合などは、javadoc/org/h2/tools/Server.htmlを見るとよいです。
データベース開発支援ツールで接続する
サーバモードで起動すると、ブラウザから付属のwebサーバ経由でアクセスすることも可能ですが、普段使用しているデータベース(SQL)支援ツールを使用して、操作したいものです。
Javaで作成されたツールであれば、urlにjdbc:h2:tcp://localhost/~/sample
とすれば使用可能です。
そうでない場合、ODBC経由での接続が可能です。
PostgreSQLのODBC経由で接続する。
デフォルトでサーバモードを起動した場合、PostgreSQLサーバも同時に立ち上がっているはずです。
これで、PostgreSQLのODBCを使用すれば、sampleデータベースにアクセスできます。
1 PostgreSQL ODBC Driverをインストール
PostgreSQLのODBCドライバのダウンロードページから
psqlodbc_09_02_0100-x64.zipもしくはpsqlodbc_09_02_01000.zipをダウンロードします。
※これより最新のドライバをインストールしたところ、接続エラーが発生しました。。。
2 ODBC データソースアドミニストレータで設定を追加
ウィンドウズボタン+R(ファイルを指定して実行)にodbcad32.exe
を入力し実行して
ODBC データソースアドミニストレータを起動します。
次にユーザデータソースの状態で「追加」をクリックして
PostgreSQL Unicode(x64)を選択して「完了」をクリック
セットアップ画面で以下のような接続情報を入力し(Portは5435になります)、テストし、接続が成功したら保存しましょう。
アドミニストレータ画面に以下のように追加されます。
3 支援ツールで接続確認する。
例としてA5:SQL Mk-2を使用しての接続確認方法です。
A5:SQL Mk-2起動後、データベースの追加と削除から、「64bit ODBC ユーザデータソースを列挙する」のチェックボックスをチェックします。
すると、データベースの一覧に表示されるので、いつものとおり接続してみます。
うまくつながりました。
おわりに
Java開発(特にサーバサイド)で、H2DBを使って入門編を記載しているところ(書籍、サイト)がありますが、H2DBそのものの使い方を準備手順に含めて記載されておらず、入門編で実践した後に
「じゃあちょっと機能追加してみようか」
「H2DBのツールからの接続方法は?」
「編集しながら繋げられないの?」
「サーバーモードにしたら今度はソースがつながらない」
「知ってるSQL接続ツールで繋げられない=H2DBに付属しているWebアプリでしか繋げられない。。。(他はjdbc使うツールだけ)」
「総じて使いにくくね?」
とならない、2歩目を進むための情報を提供したくてまとめてみました。