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をインストールします。
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全行を読み込めませんでした。