42
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

H2 Database Engine (H2DB) の環境構築

Last updated at Posted at 2017-12-04

H2 Database Engine (以降本書中ではH2DBと記載します) のWindwos環境下におけるインストールから、サーバモードでの起動方法、お使いのデータベース開発支援ツールとの接続方法(ODBC使用)までをまとめておきます。

インストール手順

  1. H2DBのサイトから「Windows Installer」をダウンロードする。(「h2-setup-yyyy-mm-dd.exe」のようなファイルがダウンロードされる)

1_edt.png

2.インストール

ダウンロードした「h2-setup-yyyy-mm-dd.exe」ファイルを実行しインストール。
「次へ」「インストール」なにも変更しない場合は、2~3ステップで完了。
no2.png

no3.png

デフォルトで「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にしました。)
no6.png

内容を

編集前
@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)を実行します。以下は、実行直後に表示されるコマンドプロンプトです。
no7.png

このバッチ(org.h2.tools.Server)は、ダブルクリックで実行できますが

h2-server.bat -tcpAllowOthers

など、いくつかのオプションを追加することも可能です。
(-tcpAllowOthersは、後述に記載していますが、tcp(サーバーモードの接続方法)での接続を外部端末からでもアクセスできるように許可します。

また、コマンドプロンプト上に3行表示されているのが確認できると思いますが、サーバーモード(org.h2.tools.Server)をオプションなしで実行した場合

  1. サーバーモード(tcpサーバ)
  2. PostgreSQLサーバ
  3. webサーバ

の3つのサーバが同時に起動します。
以下は、起動時にコマンドプロンプトと同時にブラウザに表示されるwebサーバのトップ画面です。
no8.png

[付録]オプション

サーバモード起動時に、次のようなオプションを指定することが可能です。

H2DBサーバモードのオプション
>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をダウンロードします。
※これより最新のドライバをインストールしたところ、接続エラーが発生しました。。。

no9.png

2 ODBC データソースアドミニストレータで設定を追加

ウィンドウズボタン+R(ファイルを指定して実行)にodbcad32.exeを入力し実行して
ODBC データソースアドミニストレータを起動します。

次にユーザデータソースの状態で「追加」をクリックして

no12.png

PostgreSQL Unicode(x64)を選択して「完了」をクリック

no13.png

セットアップ画面で以下のような接続情報を入力し(Portは5435になります)、テストし、接続が成功したら保存しましょう。

no14.png

以下が成功した場合のダイアログ表示です。
16.png

アドミニストレータ画面に以下のように追加されます。

no17.png

3 支援ツールで接続確認する。

例としてA5:SQL Mk-2を使用しての接続確認方法です。

A5:SQL Mk-2起動後、データベースの追加と削除から、「64bit ODBC ユーザデータソースを列挙する」のチェックボックスをチェックします。

no18.png

すると、データベースの一覧に表示されるので、いつものとおり接続してみます。

no20.png

うまくつながりました。

おわりに

Java開発(特にサーバサイド)で、H2DBを使って入門編を記載しているところ(書籍、サイト)がありますが、H2DBそのものの使い方を準備手順に含めて記載されておらず、入門編で実践した後に
「じゃあちょっと機能追加してみようか」
「H2DBのツールからの接続方法は?」
「編集しながら繋げられないの?」
「サーバーモードにしたら今度はソースがつながらない」
「知ってるSQL接続ツールで繋げられない=H2DBに付属しているWebアプリでしか繋げられない。。。(他はjdbc使うツールだけ)」
「総じて使いにくくね?」

とならない、2歩目を進むための情報を提供したくてまとめてみました。

42
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?