
サーブレット&JSPの基本|H2 Databaseの導入と初期設定
JavaのWebアプリからデータベースを使う第一歩。H2 Databaseを導入し、studyデータベースとEMPLOYEESテーブルを準備しよう
前回は、データベースとSQLの基礎について学習しました。
Webアプリケーションで扱うデータをスコープに保存すると、サーバを停止したときにデータが消えてしまいます。学習用の一時的なデータであれば問題ありませんが、社員情報、商品情報、投稿内容、問い合わせ内容など、後から再利用したいデータは、サーバを停止しても残る場所に保存する必要があります。
そこで使うのが、データベースです。
この学習では、データベースとしてH2 Databaseを使用します。
H2 DatabaseはJavaで作られているデータベースで、ServletとJSPの学習にも使いやすいデータベースです。導入が比較的簡単で、SQLの練習やJavaプログラムからの接続確認にも向いています。
この記事では、Windows環境でH2 Databaseをインストールし、H2コンソールを使ってデータベースstudyを作成します。その後、studyデータベースにEMPLOYEESテーブルを作成し、従業員データを追加します。
ここで準備するEMPLOYEESテーブルは、今後Javaプログラムからデータベースへ接続し、SQLを実行する学習で使います。
まずは、H2 Databaseを使える状態にし、SQLを実行できる環境を整えていきましょう。
この記事で行う作業
この記事では、H2 Databaseを使うために、次の4つの作業を行います。
作業の全体像
| 順番 | 作業 | 内容 |
|---|---|---|
| 1 | H2 Databaseをインストールする | WindowsにH2 Databaseを導入する |
| 2 | データベースstudyを作成する | H2コンソールからstudyデータベースを作成する |
| 3 | EMPLOYEESテーブルを作成する | 従業員情報を保存する表を作成する |
| 4 | EMPLOYEESテーブルにデータを追加する | 従業員データをINSERT文で登録する |
最初にH2 Database本体をインストールします。
次に、H2コンソールを起動して、データベースstudyを作成します。
その後、サーバーモードでstudyデータベースに接続し、SQLを使ってEMPLOYEESテーブルを作成します。
最後に、EMPLOYEESテーブルへ従業員データを追加します。
H2 Databaseとは
H2 Databaseは、Javaで作成されたリレーショナルデータベースです。
Javaの開発環境と相性がよく、学習や小規模な開発で扱いやすいデータベースとして利用できます。
H2 Databaseの特徴
| 特徴 | 内容 |
|---|---|
| Javaで作成されている | Javaアプリケーションと組み合わせやすい |
| 導入しやすい | 学習環境でも準備しやすい |
| H2コンソールが使える | ブラウザ画面からSQLを実行できる |
| 組み込みモードとサーバーモードがある | 用途に応じて接続方法を切り替えられる |
| SQLの学習に向いている | テーブル作成やデータ追加を手軽に試せる |
H2 Databaseを使うと、ブラウザで開くH2コンソールからSQLを実行できます。
SQLを実行してデータベースを作成したり、テーブルを作成したり、レコードを追加したりできます。
H2 Databaseをインストールする
まず、H2 DatabaseをWindowsにインストールします。
以下のURLの H2 Databaseの公式サイトにアクセスし、Downloadの欄にあるWindows Installerのリンクからインストーラをダウンロードします。
https://www.h2database.com/html/main.html

ダウンロードしたexeファイルを実行すると、セットアップ画面が表示されます。

画面の指示に従って、インストールを進めます。

インストールの流れ
| 手順 | 内容 |
|---|---|
| 1 | H2 Databaseのサイトにアクセスする |
| 2 | Download欄からWindows Installerを選択する |
| 3 | exeファイルを任意の場所に保存する |
| 4 | ダウンロードしたexeファイルを実行する |
| 5 | セットアップ画面に従ってインストールする |
| 6 | 必要に応じてショートカットを作成する |
インストールが完了すると、WindowsのスタートメニューからH2 Consoleを起動できるようになります。
H2コンソールを起動する
H2 Databaseを操作するときは、H2コンソールを使用します。
H2コンソールは、H2 Databaseを管理するための画面です。
H2コンソールを起動すると、ブラウザが開き、接続設定を入力する画面が表示されます。
H2コンソールの起動手順
| 手順 | 内容 |
|---|---|
| 1 | Windowsのスタートメニューをクリックする |
| 2 | H2の項目を開く |
| 3 | H2 Consoleをクリックする |
| 4 | ブラウザが起動する |
| 5 | H2コンソールの画面が表示される |

H2コンソールの画面は、初期状態では英語で表示されることがあります。
画面上部のプルダウンメニューから日本語を選択すると、日本語表示に切り替えられます。「接続」をクリックします。

ブラウザでH2コンソールが開きます。

図1:H2 DatabaseをインストールしてH2コンソールを起動する

この図から分かること
H2 Databaseを使うには、まずインストーラをダウンロードしてWindowsにインストールします。
インストール後、H2 Consoleを起動すると、ブラウザでH2コンソールが表示されます。
H2コンソールでは、JDBC URLなどの接続情報を入力し、データベースへ接続できます。
この画面からSQLを実行できるため、テーブル作成やデータ追加などの作業を進められます。
H2 Databaseを終了する
H2 Databaseを起動すると、WindowsのタスクバーにH2 Databaseのアイコンが表示されます。

黄色い円柱のようなアイコンが表示されていれば、H2 Databaseが起動している状態です。
作業が終わったら、H2 Databaseを終了できます。
終了手順
| 手順 | 内容 |
|---|---|
| 1 | タスクバーに表示されているH2 Databaseのアイコンを確認する |
| 2 | アイコンを右クリックする |
| 3 | Exitをクリックする |
| 4 | H2 Databaseが終了する |
H2 Databaseを使い終わったら、必要に応じて終了しておきましょう。
ただし、あとでJavaプログラムからデータベースへ接続する場合は、H2 Databaseを起動しておく必要があります。
データベースstudyを作成する
H2 Databaseのインストールが終わったら、次にデータベースstudyを作成します。
H2コンソールを起動し、接続設定を入力します。
ここでは、最初に組み込みモードを使ってデータベースを作成します。
データベース作成時の設定
| 項目 | 設定値 |
|---|---|
| 保存済み設定 | Generic H2 (Embedded) |
| JDBC URL | jdbc:h2:~/study |
| 作成されるデータベース名 | study |
| 作成場所 | H2コンソールを操作しているユーザーのホームディレクトリ |
保存済み設定でGeneric H2 (Embedded)を選択すると、H2 Databaseは組み込みモードで動作します。
組み込みモードでは、JDBC URLで指定したデータベースが存在しない場合、新しく作成されます。
すでに存在している場合は、そのデータベースへ接続します。
JDBC URLとは
JDBC URLは、JavaプログラムやH2コンソールが、どのデータベースへ接続するのかを指定する文字列です。
H2 Databaseでは、JDBC URLの書き方によって、接続先や接続モードが変わります。
たとえば、次のJDBC URLを指定すると、ユーザーのホームディレクトリにstudyデータベースを作成します。
jdbc:h2:~/study
JDBC URLの例
| JDBC URL | 意味 |
|---|---|
| jdbc:h2:~/study | ユーザーのホームディレクトリにあるstudyデータベースへ接続する |
| jdbc:h2:file:C:/data/study | C:/dataフォルダにあるstudyデータベースへ接続する |
jdbc:h2:~/studyを指定した場合、H2コンソールを操作しているユーザーのホームディレクトリにstudyデータベースが作成されます。
学習では、このjdbc:h2:~/studyを使ってデータベースを作成します。
組み込みモードでstudyデータベースを作成する
H2コンソールを開いたら、保存済み設定でGeneric H2 (Embedded)を選択します。
次に、JDBC URLに「jdbc:h2:~/study」を入力します。
入力できたら、接続ボタンをクリックします。

データベース作成の手順
| 手順 | 内容 |
|---|---|
| 1 | H2コンソールを起動する |
| 2 | 保存済み設定でGeneric H2 (Embedded)を選択する |
| 3 | JDBC URLにjdbc:h2:~/studyを入力する |
| 4 | 接続ボタンをクリックする |
| 5 | studyデータベースが作成され、接続状態になる |
| 6 | 作成を確認したら、左上の切断ボタンをクリックする |
接続に成功すると、H2コンソール上でデータベースに接続した状態になります。
この時点で、studyデータベースが作成されています。

確認できたら、左上の切断ボタンをクリックし、いったん接続を解除します。

図2:組み込みモードでstudyデータベースを作成する

この図から分かること
studyデータベースを作成するときは、H2コンソールでGeneric H2 (Embedded)を選択します。
JDBC URLにjdbc:h2:~/studyを入力して接続すると、指定したstudyデータベースが存在しない場合に新規作成されます。
作成できたら、左上の切断ボタンで接続を解除します。
この学習では、組み込みモードはデータベース作成のために使い、その後のSQL実行やJavaプログラムからの利用ではサーバーモードを使います。
組み込みモードとサーバーモードの違い
H2 Databaseには、組み込みモードとサーバーモードがあります。
この記事では、データベースの作成には組み込みモードを使い、テーブル作成やデータ追加にはサーバーモードを使います。
接続モードの違い
| モード | 保存済み設定 | 主な用途 | 特徴 |
|---|---|---|---|
| 組み込みモード | Generic H2 (Embedded) | データベース作成 | 指定したデータベースがなければ新規作成できる |
| サーバーモード | Generic H2 (Server) | SQL実行やJavaプログラムからの接続 | 複数のプログラムから同時アクセスしやすい |
組み込みモードでは、データベースへ同時にアクセスできないことがあります。
そのため、H2コンソールで接続したままにしていると、Javaプログラムから接続できないトラブルが起こる場合があります。
この学習では、組み込みモードはstudyデータベースを作成するときだけ使います。
テーブル作成やデータ追加など、実際にSQLを実行する作業では、サーバーモードで接続します。
サーバーモードでstudyデータベースに接続する
studyデータベースを作成したら、次にサーバーモードで接続します。
サーバーモードでは、複数のプログラムから同時にデータベースへアクセスしやすくなります。
今後、JavaプログラムからH2 Databaseへ接続することを考えると、サーバーモードで操作する流れに慣れておくことが大切です。
サーバーモードの接続設定
| 項目 | 設定値 |
|---|---|
| 保存済み設定 | Generic H2 (Server) |
| JDBC URL | jdbc:h2:tcp://localhost/~/study |
| 接続先 | 作成済みのstudyデータベース |
| 用途 | SQLの実行、テーブル作成、データ追加 |
H2コンソールの保存済み設定でGeneric H2 (Server)を選択します。
JDBC URLには、jdbc:h2:tcp://localhost/~/studyを入力します。
入力できたら、接続ボタンをクリックします。

データベースに接続してSQLが実行できる状態となります。

JDBC URL jdbc:h2:tcp://localhost/~/study の意味
サーバーモードでstudyデータベースに接続するときは、次のJDBC URLを使います。
jdbc:h2:tcp://localhost/~/study
このJDBC URLは、H2 DatabaseのサーバーへTCP接続し、ローカル環境にあるstudyデータベースを利用することを表します。
JDBC URLの見方
| 部分 | 意味 |
|---|---|
| jdbc:h2 | H2 DatabaseへJDBCで接続する |
| tcp://localhost | 自分のPC上で起動しているH2 DatabaseへTCP接続する |
| ~/study | ユーザーのホームディレクトリにあるstudyデータベースを指定する |
接続先のstudyデータベースは、すでに作成されている必要があります。
まだ作成していない場合は、先に組み込みモードでjdbc:h2:~/studyへ接続し、studyデータベースを作成しておきます。
EMPLOYEESテーブルを作成する
サーバーモードでstudyデータベースに接続できたら、SQLを実行できる状態になります。
H2コンソールの画面右上にあるSQL入力欄にSQLを入力し、実行ボタンをクリックします。
実行ボタンは、画面上部にある緑色の三角形の丸ボタンです。
ここでは、従業員情報を保存するEMPLOYEESテーブルを作成します。
EMPLOYEESテーブルの列
| 列名 | データ型 | 制約 | 内容 |
|---|---|---|---|
| ID | CHAR(6) | PRIMARY KEY | 従業員ID |
| NAME | VARCHAR(100) | NOT NULL | 従業員名 |
| AGE | INT | NOT NULL | 年齢 |
ID列は、従業員を一意に識別するための列です。
PRIMARY KEYを指定することで、主キーとして扱います。
NAME列は従業員名を保存します。VARCHAR(100)なので、最大100文字までの文字列を保存できます。
AGE列は年齢を保存します。INTなので整数を保存します。
NAME列とAGE列にはNOT NULLを指定しています。これは、値を必ず入れる必要があることを表します。
EMPLOYEESテーブルを作成するSQL
H2コンソールで、次のSQLを実行します。
CREATE TABLE EMPLOYEES (
ID CHAR(6) PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
AGE INT NOT NULL
);このSQLを実行すると、studyデータベースの中にEMPLOYEESテーブルが作成されます。
SQLの内容
| SQLの部分 | 内容 |
|---|---|
| CREATE TABLE EMPLOYEES | EMPLOYEESテーブルを作成する |
| ID CHAR(6) PRIMARY KEY | 6文字固定のID列を作り、主キーにする |
| NAME VARCHAR(100) NOT NULL | 最大100文字の名前列を作り、必須項目にする |
| AGE INT NOT NULL | 整数の年齢列を作り、必須項目にする |
CREATE TABLEは、テーブルを作成するSQL文です。
テーブル名の後ろの丸カッコの中に、列名、データ型、制約を指定します。
EMPLOYEESテーブルにレコードを追加する
テーブルを作成したら、次にレコードを追加します。
レコードを追加するには、INSERT文を使います。
ここでは、2件の従業員データを追加します。
追加するレコード
| ID | NAME | AGE |
|---|---|---|
| EMP001 | 山田 太郎 | 30 |
| EMP002 | 佐藤 花子 | 27 |
ID、NAME、AGEの3つの列に値を指定して、EMPLOYEESテーブルへ追加します。
EMPLOYEESテーブルにデータを追加するSQL
H2コンソールで、次のSQLを実行します。
INSERT INTO EMPLOYEES (ID, NAME, AGE)
VALUES ('EMP001', '山田 太郎', 30);
INSERT INTO EMPLOYEES (ID, NAME, AGE)
VALUES ('EMP002', '佐藤 花子', 27);このSQLを実行すると、EMPLOYEESテーブルに2件のレコードが追加されます。
SQLの内容
| SQLの部分 | 内容 |
|---|---|
| INSERT INTO EMPLOYEES | EMPLOYEESテーブルへレコードを追加する |
| (ID, NAME, AGE) | 値を入れる列を指定する |
| VALUES | 実際に追加する値を指定する |
| EMP001、山田 太郎、30 | 1件目の従業員データ |
| EMP002、佐藤 花子、27 | 2件目の従業員データ |
INSERT文では、どの列に、どの値を入れるのかを指定します。
IDとNAMEは文字列なので、SQL内では文字列として指定します。
AGEは数値なので、23や22のように数値として指定します。
図3:サーバーモードで接続し、EMPLOYEESテーブルを作成する

この図から分かること
studyデータベースを作成した後は、サーバーモードで接続してSQLを実行します。
H2コンソールでGeneric H2 (Server)を選択し、JDBC URLにjdbc:h2:tcp://localhost/~/studyを指定します。
接続できたら、SQL入力欄にCREATE TABLE文やINSERT文を入力し、実行ボタンでSQLを実行します。
CREATE TABLE文でEMPLOYEESテーブルを作成し、INSERT文で従業員データを追加します。
SQLをまとめて実行する
EMPLOYEESテーブルを作成し、データを追加するSQLは、まとめて入力して実行できます。
CREATE TABLE EMPLOYEES (
ID CHAR(6) PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
AGE INT NOT NULL
);
INSERT INTO EMPLOYEES (ID, NAME, AGE)
VALUES ('EMP001', '山田 太郎', 30);
INSERT INTO EMPLOYEES (ID, NAME, AGE)
VALUES ('EMP002', '佐藤 花子', 27);H2コンソールのSQL入力欄に上記のSQLを入力し、実行ボタン(画面上部の緑の三角の丸ボタン)をクリックします。

実行が成功すると、EMPLOYEESテーブルが作成され、2件の従業員データが追加されます。
SQLの実行が終わったら、左上の切断ボタンをクリックして接続を解除します。

作成後に確認しておきたいこと
SQLの実行が終わったら、データベースの状態を確認します。
確認ポイント
| 確認項目 | 内容 |
|---|---|
| 接続先 | studyデータベースに接続しているか |
| 接続モード | Generic H2 (Server)で接続しているか |
| テーブル | EMPLOYEESテーブルが作成されているか |
| レコード | EMP001とEMP002の2件が追加されているか |
| 切断 | 作業後に接続を解除したか |
特に、組み込みモードとサーバーモードの使い分けに注意しましょう。
studyデータベースを作成するときは、Generic H2 (Embedded)を使います。
studyデータベースに接続してSQLを実行するときは、Generic H2 (Server)を使います。
よくあるつまずき
H2 Databaseの初期設定では、接続モードやJDBC URLの指定を間違えると、うまく接続できないことがあります。
確認したいポイント
| 状況 | 確認すること |
|---|---|
| 接続できない | H2 Databaseが起動しているか |
| studyデータベースが見つからない | 先に組み込みモードでjdbc:h2:~/studyに接続して作成したか |
| Javaプログラムから接続できない | H2コンソールで組み込みモードの接続を開いたままにしていないか |
| テーブルが作成されない | CREATE TABLE文に誤字がないか |
| データが追加されない | INSERT文の列名と値の数が一致しているか |
| 文字列の値でエラーになる | SQLの文字列リテラルを正しく指定しているか |
H2 Databaseでは、JDBC URLが少し違うだけで、別の接続先として扱われることがあります。
そのため、データベース作成時のjdbc:h2:~/studyと、サーバーモード接続時のjdbc:h2:tcp://localhost/~/studyを正しく使い分けましょう。
ここまでで準備できたもの
この記事の作業を終えると、次の状態になります。
準備できた内容
| 項目 | 内容 |
|---|---|
| H2 Database | Windowsにインストール済み |
| H2コンソール | ブラウザから利用可能 |
| studyデータベース | 作成済み |
| EMPLOYEESテーブル | 作成済み |
| 従業員データ | EMP001とEMP002の2件を追加済み |
この状態まで準備できれば、次はJavaプログラムからH2 Databaseへ接続し、EMPLOYEESテーブルのデータを取得する学習へ進めます。
ServletとJSPのWebアプリケーションからデータベースを使うためには、まずデータベース、テーブル、初期データを用意することが大切です。
今回作成したstudyデータベースとEMPLOYEESテーブルを使って、今後はJDBCによる接続やSQL実行を確認していきます。
