サーバーJava入門先頭  H2 DB編先頭
2009-8-26更新 2007-10-31作成

 ■H2 DB 操作2

 ここではH2 Database Engineをサーバーモードで使用するときの
・操作方法 について説明します。

 ■データベースへの接続

 ここではまずH2 Consoleの操作画面が、ブラウザ上で開かれていることを前提にします。この画面が開かれていないときは、次の方法で起動してください。両者の違いは「■H2 DBの起動と停止」を参照してください。
 ・サービス時 :スタートメニューから「プログラム」−「H2」−「H2 Console」と進みます。
 ・非サービス時:スタートメニューから「プログラム」−「H2」−「H2 Console (Command Line)」と進みます。

 インストールしたH2 DBのバージョンにもよりますが、次のような画面になっていると思います(2007/10/20版ではこうなっていました)。

 この画面で接続先データベースの選択(指定)と、接続を行います。

H2 Consoleの初期状態(接続先データベース指定画面)
H2 Consoleの初期状態(接続先データベース指定画面)

 まず言語選択を、英語から日本語に変えておきましょう。

言語選択を日本語に変更した状態
言語選択を日本語に変更した状態

 さてこの画面上で下にある、「接続」ボタンを押すことによりH2 DBのデータベースに接続します。

 ただしここで注意があります。まだ「接続」ボタンは押さないでください。先に次のセクションを読んでからにしましょう。

 ◇H2 DBデータベースファイルの場所

 まずH2 DBのDB構成を書いておきます。一般的な他のRDBと変わりません。最初に「データベース」という管理単位があり、その中に「テーブル」がある、という構成です(H2の場合、この両者の間にくる「テーブルスペース」という概念はありません)。

 なんらかの操作をする場合、まず対象データベースに接続してから、ということになります。

 注意点というのは、H2 Console画面で「接続」ボタンを押した場合、次のどちらかの処理が行われる、という点です。まず「接続」ボタンを押すと、画面の JDBC URL で指定したデータベースに接続しようとします。このとき

 ・指定したデータベースがあればそこに接続する
 ・指定したデータベースが無ければ、そのデータベースを作成する

という動作をします。  とりわけ2つ目の動作があり得ることが、重要なポイントです。なお「接続」ではなく、「接続テスト」の方でもデータベースだけは作成されます。このあたりは「H2 DBユーザー管理」でもう少し説明します。データベース作成前に先に目を通しておいたほうが良いかもしれません。

デフォルトのデータベースファイルへのパス
デフォルトのデータベースファイルへのパス


 では次にH2 Console画面での JDBC URL 指定パターンと、作成されるデータベースファイルの所在についてまとめておきます。

 JDBC URL で指定した jdbc:h2: の後ろが、接続(作成)しようとするデータベースの名前です。この名前部分の指定パターンによって、データベースファイルの作成場所が次のように変わります。

データベースファイルの作成場所
指定パターンデータベースファイルの所在
jdbc:h2:~/test  初期状態のデフォルト。
 C:\Documents and Settings\Windowsユーザー名\ に、testデータベースが作成される。
jdbc:h2:test  少し前のバージョンのときは、こちらが初期状態のデフォルトだった。
 H2インストールディレクトリ\bin\ に、testデータベースが作成される。
jdbc:h2:c:\work\data\test  ドライブ名からフルパスで指定したときは、そのフルパス指定の場所に作成される。
 例ではc:\work\data\ に、testデータベースが作成される。

 次の例ではデータベースファイルを、c:\work\data\ に作成し、作成するデータベース名を testdb に変更しています。

データベースファイルへのパスを変更した状態
データベースファイルへのパスを変更した状態


 ◇H2 DBデータベースファイルの場所変更

 H2 Console画面で接続時に指定する JDBC URL 指定パターンにより、データベースファイルの作成場所が変わる、と説明しました。そしてその指定パターンの2番目、データベース名のみを指定したときは、H2インストールディレクトリ\bin\ がデータベースファイルの場所なのが初期状態です。
 ここではこの指定パターンのときに、対象になるデータベースファイルの場所を変更するやり方を説明します。

 その方法はH2 DB起動時のパラメータに、baseDirキーワードを追加し、その引数にデータベースファイルの場所(パス)を指定する、というものです。
 以下いままでの説明の続きと言うことで、c:\work\data\ をデータベースファイルのパスとする例で説明します。

 なおこの baseDirキーワードによるデータベースファイルの場所変更は、上で説明した「データベースファイルの作成場所」と競合します。 baseDirキーワードが強すぎるのです。
 どういうことかというと例えば、baseDirのパスとしてc:\work\data\を指定するとそれが最優先されます。JDBC URLに~/testとしてもtestデータベースはDocument and Setting\Windowsユーザー名\に作られるのではなく、c:\work\data\~\に作られてしまいます。
 この問題については作者のThomas Mueller氏に、改善要望として挙げる予定です(2008/2/3)。

 ・非サービス時の起動用修正

 非サービス時はスタートメニューから「プログラム」−「H2」−「H2 Console」と進むことにより、H2 DBを起動します。
 従ってこのときのパラメータを修正します。

 修正するファイルは\Documents and Settings\WindowsユーザーID\スタート メニュー\プログラム\H2にある、H2 Consoleというショートカットファイルです。このファイルのプロパティに「リンク先」がありますが、その内容を修正します(Windows2000の場合は、「タスクバーをマウス右ボタンクリックでプロパティを選択」−「詳細タブ選択」−「詳細ボタン」と進み、「プログラム」−「H2」−「H2 Console」と選択してください)。

 修正後の「リンク先」の内容を全て書いておくと
C:\WINNT\system32\javaw.exe -cp "C:\H2\bin\h2.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console -baseDir "C:\WORK\DATA"
ですが、要は次の図のように -baseDir "C:\WORK\DATA" を追加してください。

H2 Consoleのプロパティ修正内容
H2 Consoleのプロパティ修正内容

 ・サービス時の起動用修正

 サービスとしてインストールしているときは、 H2インストールディレクトリ\service\wrapper.conf を修正することによって行います。
 次にwrapper.confファイルの修正該当部分を載せておきます。


#********************************************************************
# Wrapper Properties
#********************************************************************
# Java Application
wrapper.java.command=java

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.  Helper
#  classes are provided to do this for you.  See the Integration section
#  of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=wrapper.jar
wrapper.java.classpath.2=../bin/h2.jar
wrapper.java.classpath.3=%H2DRIVERS%
wrapper.java.classpath.4=%CLASSPATH%

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=

# Java Additional Parameters
#wrapper.java.additional.1=

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=16

# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64

# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=org.h2.tools.Server
wrapper.app.parameter.2=-tcp
wrapper.app.parameter.3=-web
wrapper.app.parameter.4=-baseDir
wrapper.app.parameter.5="C:\WORK\DATA"

 太字の部分が追加したパラメータです。
 ここのポイントは、パラメータを2つに分けて、2行追加するという点です。
 追加するパラメータ自体は -baseDir "C:\WORK\DATA" と、-baseDirキーワードとその引数 "C:\WORK\DATA" の組で1つです。しかしキーワードとその引数は空白で区切られます。そのためwrapper.confファイル中のwrapper.app.parameterで指定する場合、1行では指定出来ません(区切りの空白でwrapper.app.parameterの指定が終わったと見なされる)。そのため2つに分けて2行で指定します。



 以上のように修正することによって、非サービス時の起動でも、サービス時の起動でも、データベース名だけを指定したときに、対象になるデータベースファイルの場所を変更できます。

 なお

  1. 外部アプリからODBC経由で接続する
  2. データベースファイルはH2インストールディレクトリ\bin\以外に置く
の2つの条件を満たす場合、この「データベースファイルの場所変更」は必ず実施しておいてください。



 以下の説明例ではこの、c:\work\data\testdb データベースを使用することにします。ここで「接続」ボタンを押して、データベース作成と接続を行います。

 参考までに。一つのデータベースに対し、作成される最低限のファイルは次の4つです。

  1. データベース名.data.db
  2. データベース名.index.db
  3. データベース名.trace.db
  4. データベース名.n.log.db

 1. はデータベースのデータ本体、2. はインデックス情報、3. はトレース情報です。  そして 4. がログ情報で、n.log.dbの n の部分は連番です。このデータベースに接続する度に増えていきます。

 これらのファイルを消してしまえば、データベースが削除されます。H2 DBではDROP DATABASEという構文は無いので、何らかの理由でデータベースを削除したいときは、これらファイルを削除してしまえば手っ取り早くデータベースも削除できます。

 またH2 DB停止中にこれらのファイルをコピーすれば、コールドバックアップ(Cold Backup)したことになります。

 なお正式なデータベース削除方法は、次の通りです。
 1:削除対象データベースに接続する
 2:DROP ALL OBJECTS DELETE FILES; を実行する
これでデータベースが削除できます。DELETE FILESキーワードを指定することによって、ファイルも削除されます。


 ■H2 DBの操作画面(コンソール)

 選択したデータベースに接続すると、次のコンソール画面が表示されます。

データベース(c:\work\data\testdb)に接続した状態
データベース(c:\work\data\testdb)に接続した状態

 H2 DBに対する操作、
 ・テーブル操作(作成・変更・削除・・・)
 ・バックアップ/リストア
 ・ユーザー登録、権限変更
などは、この画面から行います。

 すぐにこれらの操作説明に行きたいところですが、先に「データベースからの切断」方法を説明します。

 ・データベースからの切断

 接続したデータベースから切断するには、コンソール画面左上にある「切断」ボタンをクリックしてください。

データベースからの切断ボタン
データベースからの切断ボタン

 このボタンを押すことにより、最初の接続先データベース指定画面に戻ります。

 ■H2 DB 接続設定

 ここまではH2 DBが動作しているのと同じPC上から、H2 Consoleを使って接続する説明をしてきました。

 ここでH2 DB動作PCの、外部からのアクセスを可能にする方法と、別PCで動いているH2 DBに接続する方法について説明します。

 ■外部からの接続

 まず外部からの(別PCからの)接続を可能にするには、H2 DBの設定を変更する必要があります。

 設定方法は2通りあり、一つは設定ファイルを直接修正する方法です。もう一つは設定画面から行う方法です。

 ・H2DB設定ファイル

 H2 DBの設定ファイルは.h2.server.propertiesという名前で、これは
C:\Documents and Settings\H2 DBをインストールしたときのユーザーID\ ディレクトリ、つまりインストールをしたユーザーIDのHOMEディレクトリにあるはずです。

 ただしこのファイルが無い場合もあります。インストール後、初期状態のままのときです。一度下の説明にある「H2DB設定画面」の手順で「H2コンソール設定」を表示し、「保存」ボタンを押したときにこのファイルは作成されます。

 このファイルの内容を以下に例示します。これは外部からの接続を許可しない設定の例です。


#H2 Server Properties
#Fri May 23 20:49:57 JST 2008
0=Generic JNDI Data Source|javax.naming.InitialContext|java\:comp/env/jdbc/Test|sa
1=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc\:firebirdsql\:localhost\:c\:/temp/firebird/test|sysdba
10=Generic Derby (Server)|org.apache.derby.jdbc.ClientDriver|jdbc\:derby\://localhost\:1527/test;create\=true|sa
11=Generic Derby (Embedded)|org.apache.derby.jdbc.EmbeddedDriver|jdbc\:derby\:test;create\=true|sa
12=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:testdb|sa
13=Generic H2 (Server)|org.h2.Driver|jdbc\:h2\:tcp\://localhost/testdb|sa
2=Generic OneDollarDB|in.co.daffodil.db.jdbc.DaffodilDBDriver|jdbc\:daffodilDB_embedded\:school;path\=C\:/temp;create\=true|sa
3=Generic DB2|COM.ibm.db2.jdbc.net.DB2Driver|jdbc\:db2\://localhost/test|
4=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc\:oracle\:thin\:@localhost\:1521\:test|scott
5=Generic MS SQL Server 2000|com.microsoft.jdbc.sqlserver.SQLServerDriver|jdbc\:microsoft\:sqlserver\://localhost\:1433;DatabaseName\=sqlexpress|sa
6=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://localhost;DatabaseName\=test|sa
7=Generic PostgreSQL|org.postgresql.Driver|jdbc\:postgresql\:test|
8=Generic MySQL|com.mysql.jdbc.Driver|jdbc\:mysql\://localhost\:3306/test|
9=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc\:hsqldb\:test;hsqldb.default_table_type\=cached|sa
webAllowOthers=false
webPort=8082
webSSL=false

 webAllowOthersパラメータがfalseになっているので、外部からの接続は許可されません。これをtrueに変えることによって、外部からのアクセスが可能になります。

 ・H2DB設定画面

 H2 DB設定画面を表示する手順は次の通りです。

 H2 Consoleを表示するために、H2 DBに接続します。その画面上部にある、「設定」をクリックしてください(H2 DBを終了させるときと同じです)。

設定画面の表示方法
設定画面の表示方法

 そうすると次の設定画面に移ります。

設定画面の内容
設定画面の内容

 このサンプルでは「クライアント接続許可」が、「ローカル接続のみ許可」にチェックされています。この場合はH2 DBが動いているのと、同じPC上でしか接続・操作できません。

 これを下の「他のコンピュータからの接続を許可」をチェックに変えることにより、他のPCからH2 DBに接続して操作出来るようになります。


 注意がいるのは別PCからの接続というのは、
・他のPCからH2 Consoleで接続して操作する
・他のPCからODBC経由で接続して操作する
・他のPCからJDBC経由で接続して操作する
といった状況を想定しているという点です。

 例えばJ2EE環境でAPサーバーとしてTOMCATを使い、H2 DBと同じPC上でTOMCATも動かしているとします。この場合は外部からの要求はTOMCATが受け付け、TOMCAT上のJavaプログラムで処理されます

 つまりサーバーJavaに対して外部からアクセス可能です。しかしH2 DBにアクセスするJavaプログラム、つまりTOMCAT上で動くJavaプログラムは、H2 DBと同じPC上で動くことになります。

 ということはこの場合は、H2 DBの設定が「ローカル接続のみ許可」になっていても、業務処理上は全く問題ありません。

 ■外部データベースへの接続

 自分が使っているPCから、別PCで動いているH2 DBへの接続方法ですが、特に難しいことはありません。接続先データベースを指定するときはスタートメニューから、「プログラム」−「H2」−「H2 Console」と進み、次の画面を表示しました。これまでの例では接続先ホストとしてlocalhost、つまり同じPC上で動いているH2 DBを指定してきました。

接続先の変更
接続先の変更

 外部PCのH2 DBに接続するには、このlocalhostの部分を変更するだけです。

 ここを相手先PCのホスト名、もしくはIPアドレスに変えてから、「接続」ボタンを押してください。この場合、相手先PCが「外部からの接続許可」を設定済であることが前提です。

接続先をIPアドレス指定したとき
接続先をIPアドレス指定したとき




このページの先頭  技術メモ先頭  サーバーJava入門先頭  H2 DB Engine編先頭
Copyright © 2007-2009 yok. All Rights Reserved.