プロジェクト

全般

プロフィール

H2 database

はじめに

H2 databaseは、JavaVM上で動作する軽量RDBMSでオープンソース、JDBC APIを使用し、組込み(同一プロセス)およびサーバーで動作します。
ライセンスは、MPL2.0(Mozilla Public License 2.0)およびEPL1.0(Eclipse Public License 1.0)のデュアルライセンスです。
2005年12月に最初のリリースがありました。主開発者のトーマス・ミュラー氏は、元Hypersoic SQLの初期開発者で、その後PointBase社に入ってPointBase Micro(商用Java SQLデータベース)の開発を手がけ、その後、H2の開発を始めました。

公式サイト: http://www.h2database.com

インストール

入手

Windows OS向けのインストーラーと、Windows他各OSでインストール可能な汎用のZIPアーカイブで提供されています。

Windows OSへインストーラーでのインストール

公式サイトから、Windows Installer形式のインストーラーをダウンロードしてインストールします。
インストールすると、デフォルトでは @C:\Program Files (x86)\H2ディレクトリにインストールされ、スタートにアイコン(H2 Console)が登録されます。

スタートから、H2 Consoleを実行すると、H2 Databaseが起動し、タスクバーの通知領域から[^](隠れているインジケータを表示します)にH2 Databaseが表示されます。右クリックするとポップアップメニューが表示されます。

そして、ブラウザにログイン画面が表示されます。

まず最初にデータベースを作成します。タスクバーの通知領域のH2 Databaseを右クリックし、ポップアップメニューから、Create a new database を選択します。ダイアログにデータベースのディレクトリとパスワードを設定します。

  • ~は、ユーザーのホームディレクトリ(Windowsは、%USERPROFILE%)を示します
  • ~/book と指定すると、C:\Users\<ユーザー名>\book.mv.db ファイルのようにdbファイルが生成されました

次に、H2 Consoleを起動し作成したデータベースに接続します。

インストール(macOS)

Homebrewからh2をインストールします。

Homebrew - H2 database

h2コマンドを実行すると、H2 Databaseプロセスが起動し、メニューバーのステータスメニューにH2 Database Engineのアイコンが表示されます。
クリックするとポップアップメニューが表示されます。

最初にデータベースを作成します。Create a new databaseを選択すると、Windowsと同様ダイアログが表示されるので、Database pathにパスを入力し、ユーザー名とパスワードを設定し、[Create]ボタンを押します。

実行

H2データベースは、次の実行モードがあります。

  • 組込みモード(Embedded)
    アプリケーションと同一JVM上からJDBCで開かれ動作する
  • サーバーモード(Server)
    1つのJVM上で動作し、TCP/IP通信で接続しJDBCまたはODBC APIで開かれる
  • 混合モード(Mixed)
    最初のアプリケーションが組み込みモードで開き、かつTCP/IPで他のプロセスからも接続可能とする

サーバーモードでの起動

Windowsユーザーセッション(ログオンした環境)からの起動

スタートメニューから、H2 Console(Command Line)を実行します。

Windowsサービス起動

サービスへの登録、起動スクリプト(バッチファイル)が用意されているので、それを使ってサービスへの登録をします。
スクリプト群は、C:\Program Files (x86)\H2\service\の下にあります。

0_run_server_debug.bat  4_stop_service.bat         wrapper.dll
1_install_service.bat   5_uninstall_service.bat    wrapper.exe
2_start_service.bat     serviceWrapperLicense.txt  wrapper.jar
3_start_browser.bat     wrapper.conf
操作 スクリプト 備考
サービスのインストール 1_install_service.bat
サービスの開始 2_start_service.bat
コンソールの立ち上げ 3_start_browser.bat 8082ポート接続固定
サービスの停止 4_stop_service.bat
サービスのアンインストール 5_uninstall_service.bat

管理者権限でコマンドプロンプトを開き、スクリプトを実行します。

サービスのインストール

1_install_service.batを実行すると、bin\h2-*.jarをh2.jarにコピーし、サービス名H2 Database Engine Serviceの名前でサービスに登録されます。

C:\Program Files (x86)\H2\service>1_install_service.bat
..\bin\h2-1.3.176.jar
        1 個のファイルをコピーしました。
ファイル ..\BIN\h2-1.3.176.jar と ..\BIN\H2.JAR を比較しています
FC: 相違点は検出されませんでした

wrapper  | H2 Database Engine Service installed.

C:\Program Files (x86)\H2\service>

インストールされたサービスは、スタートアップの種類が「自動」となっています。再起動するとサービスとして登録したH2 databaseが自動起動します。

設定

サービスとして起動するH2 databaseの設定は、同ディレクトリにあるwrapper.confに記載します。

Javaアプリケーションからの利用

JDBCドライバからの利用

H2 databaseへJDBC接続する際に使用するJDBCドライバは、H2 databaseをインストールした中にあるh2-*.jar にあるのでこれをクラスパスに含めます。

使い方

SQL

テーブルの一覧

show tables;

テーブルのスキーマを調べる

show columns from mytable;

メモ

初期データの登録

別なテーブルから生成

CREATE TABLE newtable AS SELECT * FROM oldtable;

SELECTの実行結果から新しいテーブルを生成し初期データを登録します。

CSVファイルから登録

CREATE TABLE mytable AS SELECT * FROM CSVREAD('/path/to/mytable.csv');

  • CSVファイルの先頭行が、カラム名と扱われ、各カラムはVARCHAR型としてスキーマが定義され、2行目以降がデータとしてimportされました。

CREATE TABLE mytable (id int primary key, name varchar(100), price int) AS SELECT * FROM CSVREAD('/path/to/mytable.csv');

  • スキーマの型をcreate文で定義し、CSVファイルからimportしました。
最大件数

32bit符号付整数の最大値21億(2,147,483,647)を超える行のデータをCSVファイルに用意して上述のSQLで読み込ませてみたところ、
レコード数が 2,147,483,647となってしまい、CSV全行を読み込めませんでした。


約1ヶ月前に更新