サーブレット&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つの作業を行います。

作業の全体像

順番作業内容
1H2 DatabaseをインストールするWindowsにH2 Databaseを導入する
2データベースstudyを作成するH2コンソールからstudyデータベースを作成する
3EMPLOYEESテーブルを作成する従業員情報を保存する表を作成する
4EMPLOYEESテーブルにデータを追加する従業員データを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ファイルを実行すると、セットアップ画面が表示されます。

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

インストールの流れ

手順内容
1H2 Databaseのサイトにアクセスする
2Download欄からWindows Installerを選択する
3exeファイルを任意の場所に保存する
4ダウンロードしたexeファイルを実行する
5セットアップ画面に従ってインストールする
6必要に応じてショートカットを作成する

インストールが完了すると、WindowsのスタートメニューからH2 Consoleを起動できるようになります。

H2コンソールを起動する

H2 Databaseを操作するときは、H2コンソールを使用します。

H2コンソールは、H2 Databaseを管理するための画面です。

H2コンソールを起動すると、ブラウザが開き、接続設定を入力する画面が表示されます。

H2コンソールの起動手順

手順内容
1Windowsのスタートメニューをクリックする
2H2の項目を開く
3H2 Consoleをクリックする
4ブラウザが起動する
5H2コンソールの画面が表示される

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アイコンを右クリックする
3Exitをクリックする
4H2 Databaseが終了する

H2 Databaseを使い終わったら、必要に応じて終了しておきましょう。

ただし、あとでJavaプログラムからデータベースへ接続する場合は、H2 Databaseを起動しておく必要があります。

データベースstudyを作成する

H2 Databaseのインストールが終わったら、次にデータベースstudyを作成します。

H2コンソールを起動し、接続設定を入力します。

ここでは、最初に組み込みモードを使ってデータベースを作成します。

データベース作成時の設定

項目設定値
保存済み設定Generic H2 (Embedded)
JDBC URLjdbc: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/studyC:/dataフォルダにあるstudyデータベースへ接続する

jdbc:h2:~/studyを指定した場合、H2コンソールを操作しているユーザーのホームディレクトリにstudyデータベースが作成されます。

学習では、このjdbc:h2:~/studyを使ってデータベースを作成します。

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

H2コンソールを開いたら、保存済み設定でGeneric H2 (Embedded)を選択します。

次に、JDBC URLに「jdbc:h2:~/study」を入力します。

入力できたら、接続ボタンをクリックします。

データベース作成の手順

手順内容
1H2コンソールを起動する
2保存済み設定でGeneric H2 (Embedded)を選択する
3JDBC URLにjdbc:h2:~/studyを入力する
4接続ボタンをクリックする
5studyデータベースが作成され、接続状態になる
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 URLjdbc: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:h2H2 DatabaseへJDBCで接続する
tcp://localhost自分のPC上で起動しているH2 DatabaseへTCP接続する
~/studyユーザーのホームディレクトリにあるstudyデータベースを指定する

接続先のstudyデータベースは、すでに作成されている必要があります。

まだ作成していない場合は、先に組み込みモードでjdbc:h2:~/studyへ接続し、studyデータベースを作成しておきます。

EMPLOYEESテーブルを作成する

サーバーモードでstudyデータベースに接続できたら、SQLを実行できる状態になります。

H2コンソールの画面右上にあるSQL入力欄にSQLを入力し、実行ボタンをクリックします。

実行ボタンは、画面上部にある緑色の三角形の丸ボタンです。

ここでは、従業員情報を保存するEMPLOYEESテーブルを作成します。

EMPLOYEESテーブルの列

列名データ型制約内容
IDCHAR(6)PRIMARY KEY従業員ID
NAMEVARCHAR(100)NOT NULL従業員名
AGEINTNOT 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 EMPLOYEESEMPLOYEESテーブルを作成する
ID CHAR(6) PRIMARY KEY6文字固定のID列を作り、主キーにする
NAME VARCHAR(100) NOT NULL最大100文字の名前列を作り、必須項目にする
AGE INT NOT NULL整数の年齢列を作り、必須項目にする

CREATE TABLEは、テーブルを作成するSQL文です。

テーブル名の後ろの丸カッコの中に、列名、データ型、制約を指定します。

EMPLOYEESテーブルにレコードを追加する

テーブルを作成したら、次にレコードを追加します。

レコードを追加するには、INSERT文を使います。

ここでは、2件の従業員データを追加します。

追加するレコード

IDNAMEAGE
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 EMPLOYEESEMPLOYEESテーブルへレコードを追加する
(ID, NAME, AGE)値を入れる列を指定する
VALUES実際に追加する値を指定する
EMP001、山田 太郎、301件目の従業員データ
EMP002、佐藤 花子、272件目の従業員データ

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 DatabaseWindowsにインストール済み
H2コンソールブラウザから利用可能
studyデータベース作成済み
EMPLOYEESテーブル作成済み
従業員データEMP001とEMP002の2件を追加済み

この状態まで準備できれば、次はJavaプログラムからH2 Databaseへ接続し、EMPLOYEESテーブルのデータを取得する学習へ進めます。

ServletとJSPのWebアプリケーションからデータベースを使うためには、まずデータベース、テーブル、初期データを用意することが大切です。

今回作成したstudyデータベースとEMPLOYEESテーブルを使って、今後はJDBCによる接続やSQL実行を確認していきます。