
サーブレット&JSPの基本|H2のJDBCドライバを導入する
JavaとH2 Databaseをつなぐ部品を準備する。JDBCドライバを導入して、JavaプログラムからSQLを実行できる環境を整えよう
前回は、H2 Databaseをインストールし、studyデータベースを作成しました。
さらに、studyデータベースの中にEMPLOYEESテーブルを作成し、従業員データを追加しました。
ここまでの作業で、H2コンソールからSQLを実行できる状態になっています。
ただし、ServletやJavaクラスからデータベースを操作するには、もう一段階準備が必要です。
Javaプログラムからデータベースを利用するときは、SQL文をデータベースへ送り、検索結果を受け取ります。
たとえば、EMPLOYEESテーブルから従業員一覧を取得したい場合、JavaプログラムはDBMSに対してSELECT文を送信します。そして、DBMSが検索した結果をJavaプログラムが受け取ります。
このやり取りを行うために使うのが、java.sqlパッケージとJDBCドライバです。
java.sqlパッケージは、Javaに標準で用意されているAPIです。データベースへ接続する、SQLを送信する、検索結果を受け取る、といった基本的な部品が含まれています。
一方、JDBCドライバは、使用するデータベース製品ごとに用意されるライブラリです。
H2 Databaseを使う場合は、H2 Database用のJDBCドライバが必要です。
この記事では、JavaプログラムからH2 Databaseを利用するために必要なjava.sqlパッケージの役割を確認し、H2のJDBCドライバを入手して、動的Webプロジェクトstudyに配置する手順を学習します。
Javaプログラムからデータベースを使う流れ
Javaプログラムからデータベースを利用するときは、プログラムが直接テーブルの中身を触るわけではありません。
Javaプログラムは、DBMSにSQL文を送信します。
DBMSはそのSQL文を受け取り、データベースの中にあるテーブルを操作します。
検索結果がある場合は、DBMSからJavaプログラムへ結果が返されます。
Javaプログラムとデータベースの基本的な流れ
| 順番 | 処理 | 内容 |
|---|---|---|
| 1 | JavaプログラムがSQL文を用意する | SELECT文などを作成する |
| 2 | データベースへ接続する | JavaプログラムとDBMSをつなぐ |
| 3 | SQL文を送信する | DBMSに処理を依頼する |
| 4 | DBMSがテーブルを操作する | EMPLOYEESテーブルなどを検索する |
| 5 | 検索結果を受け取る | Javaプログラムで結果を扱う |
| 6 | 接続を終了する | データベースとの接続を閉じる |
この流れをJavaプログラムで実現するために、java.sqlパッケージのクラスやインタフェースを使います。

java.sqlパッケージとは
java.sqlパッケージは、Javaプログラムからデータベースを操作するためのクラスやインタフェースをまとめたパッケージです。
Java SEの標準APIに含まれているため、追加でダウンロードする必要はありません。
Javaファイルの中でimportして使用します。
java.sqlパッケージの主なクラスやインタフェース
| クラス/インタフェース | 機能 |
|---|---|
| DriverManager | DBMSへの接続準備を行う |
| Connection | DBMSへの接続や切断を行う |
| PreparedStatement | SQL文の送信を行う |
| ResultSet | DBMSから検索結果を受け取る |
| SQLException | データベースに関するエラー情報を提供する |
これらは、JDBCプログラムを作るときに何度も登場します。
最初は名前が少し難しく見えるかもしれませんが、それぞれの役割をイメージで押さえると理解しやすくなります。
図1:Javaプログラムからデータベースを利用する流れ

この図から分かること
Javaプログラムからデータベースを使うときは、JavaプログラムとDBMSの間に接続を作ります。
この接続を表すのがConnectionです。
SQL文を送信する役割を持つのがPreparedStatementです。
SELECT文などをDBMSへ送り、DBMSがEMPLOYEESテーブルを検索します。
検索結果はResultSetとしてJavaプログラム側で受け取ります。
このように、Connection、PreparedStatement、ResultSetは、Javaプログラムとデータベースのやり取りを支える重要な部品です。
DriverManagerの役割
DriverManagerは、データベースへ接続するための準備を行うクラスです。
Javaプログラムからデータベースへ接続するとき、どのデータベースへ接続するのか、どのユーザーで接続するのか、といった情報を使います。
DriverManagerは、その接続要求を受け取り、適切なJDBCドライバを利用してデータベースへの接続を作ります。
DriverManagerのイメージ
| 項目 | 内容 |
|---|---|
| 役割 | データベース接続の入口 |
| 主な仕事 | 接続情報をもとにConnectionを取得する |
| 関係する情報 | JDBC URL、ユーザー名、パスワード |
| 利用場面 | JavaプログラムからDBMSへ接続するとき |
DriverManagerは、データベース接続の入口になるクラスだと考えると分かりやすいです。
Connectionの役割
Connectionは、Javaプログラムとデータベースの接続を表すインタフェースです。
JavaプログラムからデータベースへSQLを送信するには、まずConnectionを取得する必要があります。
Connectionがあることで、JavaプログラムはDBMSとやり取りできます。
Connectionのイメージ
| 項目 | 内容 |
|---|---|
| 役割 | JavaプログラムとDBMSをつなぐ接続 |
| イメージ | プログラムとデータベースを結ぶ道路 |
| 主な用途 | SQL文を送る準備、接続の終了 |
| 注意点 | 使い終わったら閉じる必要がある |
Connectionは、Javaプログラムとデータベースをつなぐ道路のような存在です。
道路がなければ車が走れないように、ConnectionがなければSQL文を送ることはできません。
PreparedStatementの役割
PreparedStatementは、SQL文をデータベースへ送信するためのインタフェースです。
JavaプログラムでSQL文を用意し、そのSQL文をPreparedStatementを通じてDBMSへ送ります。
たとえば、従業員一覧を取得する場合は、次のようなSELECT文を送ります。
SELECT ID, NAME, AGE FROM EMPLOYEES
PreparedStatementのイメージ
| 項目 | 内容 |
|---|---|
| 役割 | SQL文をDBMSへ送信する |
| イメージ | SQL文を運ぶ車 |
| 主な用途 | SELECT文、INSERT文、UPDATE文、DELETE文の実行 |
| 利点 | SQL文を安全かつ扱いやすい形で実行できる |
PreparedStatementは、SQL文を運ぶ車のようなものです。
Connectionという道路を通って、SQL文をDBMSへ届けます。
ResultSetの役割
ResultSetは、SELECT文の検索結果を受け取るためのインタフェースです。
DBMSが検索した結果は、Javaプログラム側でResultSetとして扱います。
たとえば、EMPLOYEESテーブルから従業員一覧を検索した場合、ID、NAME、AGEの値がResultSetに入って返ってきます。
ResultSetのイメージ
| 項目 | 内容 |
|---|---|
| 役割 | DBMSから返された検索結果を受け取る |
| イメージ | 検索結果を受け取る宅配ボックス |
| 主な用途 | SELECT文の結果を1行ずつ取り出す |
| 注意点 | INSERT文やUPDATE文の結果とは扱いが異なる |
ResultSetは、検索結果を受け取るための箱のような存在です。
JavaプログラムはResultSetから1行ずつデータを取り出し、必要に応じてJavaBeansに詰め替えたり、JSPへ渡したりします。
SQLExceptionの役割
SQLExceptionは、データベースに関するエラー情報を表す例外クラスです。
データベース接続に失敗した場合、SQL文に誤りがある場合、テーブルが存在しない場合など、データベース処理ではさまざまなエラーが起こる可能性があります。
そのようなエラーを扱うためにSQLExceptionを使います。
SQLExceptionが関係する場面
| 状況 | 例 |
|---|---|
| 接続エラー | JDBC URLが間違っている |
| 認証エラー | ユーザー名やパスワードが違う |
| SQLエラー | SELECT文やINSERT文に誤字がある |
| テーブルエラー | 指定したテーブルが存在しない |
| 制約違反 | 主キーが重複している、NOT NULL列に値がない |
JDBCプログラムでは、SQLExceptionが発生する可能性を考えながら、例外処理を書く必要があります。
JDBCドライバとは
Javaプログラムからデータベースを使うには、java.sqlパッケージだけでは足りません。
使用するデータベースに対応したJDBCドライバが必要です。
JDBCドライバは、Javaプログラムとデータベース製品の間をつなぐためのライブラリです。
H2 Databaseを使うなら、H2 Database用のJDBCドライバを用意します。
MySQLを使うなら、MySQL用のJDBCドライバが必要です。
PostgreSQLを使うなら、PostgreSQL用のJDBCドライバが必要です。
java.sqlパッケージとJDBCドライバの違い
| 項目 | java.sqlパッケージ | JDBCドライバ |
|---|---|---|
| 提供元 | Java SEの標準API | 各データベース製品の開発元 |
| 準備 | 追加準備は不要 | JARファイルを入手して配置する |
| 役割 | データベース操作の共通インタフェースを提供する | 各DBMSに合わせた実際の接続処理を担当する |
| 開発者の使い方 | importして利用する | WEB-INF/libなどに配置して利用可能にする |
開発者は、基本的にjava.sqlパッケージのクラスやインタフェースを使ってプログラムを書きます。
JDBCドライバの中身を直接詳しく扱う必要はありません。
ただし、JDBCドライバがプロジェクトに配置されていないと、JavaプログラムはH2 Databaseへ接続できません。
図2:java.sqlパッケージとJDBCドライバの関係

この図から分かること
Javaプログラムでは、DriverManager、Connection、PreparedStatement、ResultSetなど、java.sqlパッケージの部品を使ってデータベース処理を書きます。
ただし、実際にH2 Databaseへ接続するには、H2 Database用のJDBCドライバが必要です。
JDBCドライバは、H2 Databaseに合わせた接続処理を担当します。
開発者はJDBCドライバの中身を直接細かく操作するのではなく、java.sqlパッケージを通じて間接的に利用します。
JDBCプログラムとは
java.sqlパッケージとJDBCドライバを使って、データベースを利用するJavaプログラムをJDBCプログラムと呼びます。
JDBCプログラムでは、JavaプログラムからSQL文を送信し、データベースの検索結果を受け取ったり、データを追加したり、変更したり、削除したりします。
JDBCプログラムでできること
| 処理 | 使うSQL文 | Java側で使う主な部品 |
|---|---|---|
| 従業員一覧を取得する | SELECT文 | Connection、PreparedStatement、ResultSet |
| 従業員データを追加する | INSERT文 | Connection、PreparedStatement |
| 従業員データを変更する | UPDATE文 | Connection、PreparedStatement |
| 従業員データを削除する | DELETE文 | Connection、PreparedStatement |
検索処理では、DBMSから結果が返ってくるため、ResultSetを使います。
一方、追加、変更、削除では、検索結果の一覧を受け取るわけではないため、ResultSetを使わない形になることが多いです。
H2のJDBCドライバを入手する
H2 DatabaseへJavaプログラムから接続するには、H2 Database用のJDBCドライバを入手します。
H2 Databaseのダウンロードページにアクセスし、MavenのBinary JARをクリックします。
https://www.h2database.com/html/download.html

すると、H2 DatabaseのJDBCドライバであるh2-x.x.x.jarをダウンロードできます。
x.x.xの部分はバージョン番号です。
JDBCドライバ入手の流れ
| 手順 | 内容 |
|---|---|
| 1 | H2 Databaseのダウンロードページへアクセスする |
| 2 | MavenのBinary JARを探す |
| 3 | Binary JARをクリックする |
| 4 | h2-x.x.x.jarをダウンロードする |
| 5 | ダウンロードしたJARファイルを確認する |
JARファイルは、Javaのライブラリをまとめたファイルです。
H2のJDBCドライバもJARファイルとして提供されます。
ダウンロードしたh2-x.x.x.jarを、動的Webプロジェクトstudyで使える場所に配置します。
JDBCドライバをWEB-INF/libに配置する
動的WebプロジェクトでJDBCドライバを使う場合、JARファイルをWEB-INF/libフォルダに配置します。
studyプロジェクトでは、配置先は次の場所です。
src/main/webapp/WEB-INF/lib
Eclipseでは、ダウンロードしたh2-x.x.x.jarを、src/main/webapp/WEB-INF/libへドラッグアンドドロップします。

ダイアログが表示されたら、ファイルをコピーを選択してOKをクリックします。

src/main/webapp//WEB-INF/lib に JDBCドライバがコピーされていることを確認します。

JDBCドライバの配置手順
| 手順 | 内容 |
|---|---|
| 1 | ダウンロードしたh2-x.x.x.jarを用意する |
| 2 | Eclipseでstudyプロジェクトを開く |
| 3 | src/main/webapp/WEB-INF/libフォルダを確認する |
| 4 | h2-x.x.x.jarをWEB-INF/libへドラッグアンドドロップする |
| 5 | ダイアログでファイルをコピーを選択する |
| 6 | OKをクリックする |
| 7 | WEB-INF/libにJARファイルがコピーされたことを確認する |
WEB-INF直下ではなく、WEB-INF/libに配置する点に注意しましょう。
libフォルダは、Webアプリケーションで使用するライブラリのJARファイルを置く場所です。
図3:H2のJDBCドライバをstudyプロジェクトに配置する

この図から分かること
H2 Database用のJDBCドライバは、H2 DatabaseのダウンロードページからBinary JARとして入手します。
ダウンロードしたh2-x.x.x.jarは、Eclipseの動的Webプロジェクトstudy内にあるsrc/main/webapp/WEB-INF/libフォルダへ配置します。
WEB-INF/libにJARファイルを置くことで、Webアプリケーション内のJavaプログラムからH2のJDBCドライバを利用できるようになります。
配置場所をWEB-INF直下にしてしまうと、ライブラリとして正しく扱われないことがあるため、必ずWEB-INF/libに配置するようにしましょう。
JDBCプログラム開発に必要なもの
JavaからH2 Databaseを利用するJDBCプログラムを作るには、次の2つが必要です。
JDBCプログラムに必要なもの
| 必要なもの | 内容 | 準備 |
|---|---|---|
| java.sqlパッケージ | データベース操作のための標準API | Java SEに含まれているため追加準備は不要 |
| JDBCドライバ | H2 Databaseへ接続するためのライブラリ | H2 Databaseの開発元から入手してWEB-INF/libに配置する |
java.sqlパッケージは、Javaに標準で含まれているため、追加でダウンロードする必要はありません。
一方、JDBCドライバは、使用するデータベース製品に合わせて用意します。
今回使用するのはH2 Databaseなので、H2 Database用のJDBCドライバであるh2-x.x.x.jarを配置します。
WEB-INF/libに配置する理由
動的Webプロジェクトでは、Webアプリケーションで使うライブラリをWEB-INF/libに配置します。
このフォルダに置いたJARファイルは、Webアプリケーションの実行時に利用できるようになります。
WEB-INF/libの役割
| 項目 | 内容 |
|---|---|
| 配置するもの | Webアプリケーションで使うJARファイル |
| 例 | H2のJDBCドライバ、JSTLのJARファイルなど |
| 配置先 | src/main/webapp/WEB-INF/lib |
| 注意点 | WEB-INF直下ではなくlibフォルダに置く |
H2のJDBCドライバをWEB-INF/libに置くことで、ServletやDAOクラスなどのJavaプログラムからH2 Databaseへ接続できるようになります。
今後、ConnectionやPreparedStatementを使ってEMPLOYEESテーブルを検索するプログラムを作るとき、このJDBCドライバが必要になります。
導入後に確認しておきたいこと
JDBCドライバを配置したら、Eclipse上で配置場所を確認しましょう。
確認ポイント
| 確認項目 | 内容 |
|---|---|
| JARファイル名 | h2-x.x.x.jarがあるか |
| 配置先 | src/main/webapp/WEB-INF/libにあるか |
| 配置方法 | ファイルをコピーで取り込んだか |
| プロジェクト名 | studyプロジェクトに配置しているか |
| H2 Database | 今後接続するstudyデータベースが作成済みか |
JDBCドライバが正しく配置されていないと、JavaプログラムからH2 Databaseへ接続できません。
たとえば、接続処理を書いたときに、ドライバが見つからないという内容のエラーが出ることがあります。
エラーを防ぐためにも、最初にWEB-INF/libへ正しく配置されているか確認しておくと安心です。
ここまでで準備できたこと
ここまでの作業で、JavaプログラムからH2 Databaseへ接続するための準備が整いました。
準備できた内容
| 項目 | 内容 |
|---|---|
| java.sqlパッケージ | Java SE標準APIとして利用できる |
| H2のJDBCドライバ | h2-x.x.x.jarとして入手する |
| 配置先 | studyプロジェクトのsrc/main/webapp/WEB-INF/lib |
| 今後使う主な部品 | DriverManager、Connection、PreparedStatement、ResultSet、SQLException |
| 接続対象 | H2 Databaseのstudyデータベース |
次にJDBCプログラムを書くときは、java.sqlパッケージのクラスやインタフェースをimportして利用します。
そして、WEB-INF/libに配置したH2のJDBCドライバを通じて、H2 Databaseへ接続します。
これにより、JavaプログラムからSQL文を送信し、EMPLOYEESテーブルのデータを取得する準備が整います。
