【初心者向け】JDBCについてまとめてみた

公開日: 2025/7/18

Javaで開発を行う際にデータベースにアクセスする機会はかなり多くなります。その際多くの場合に必要になるのがJDBCというAPIになります。今回は、JDBCの特徴を説明して実際にデータベースにアクセスしてみようと思います。

1. JDBCとは


JDBC(Java Database Connectivity)は、JavaプログラムからデータベースにアクセスするためのJava標準のAPIになり、Javaでデータベースを扱うクラスのようなものです。データベースには様々な種類や機能があるため、それぞれのデータベースに対応したプログラムを作成するにはかなりコストがかかってしまいます。そういった問題を解決するためにJDBCは生まれました。JDBCを使用すると、Javaプログラムはさまざまな種類のリレーショナルデータベースに接続し、SQLクエリを実行し、データを取得、更新、削除することができます。なお、JDBCは、WindowsのODBC(Open Database Connectivity)をベースとして構築されたため、「Java Database Connectivity」を略して名付けられたと考えられています

もっと簡単に噛み砕いて説明してみます。私たちが話す言語は日本語ですが、海外旅行に行くと英語で会話しないといけない場面や、中国語、韓国語と必要な言語が変わってきます。その度にそれぞれの言語を話せるように学習したり翻訳をしたりすると時間がかかってしまいます。それを解決するには、英語、中国語、韓国語が話せる通訳を雇うことです。そうすることでそれぞれの言語を話す必要はありません。この通訳の役目がJDBCの役目になります。続いてJDBCの構成要素について解説します。

2. JDBCの構成要素


JDBC を利用してJavaプログラムとデータベースを連携させるための要素は、以下の4つから構成されています。

 ①開発者が作成するJavaプログラム(SQLに接続するためのコード)
 ②Javaで提供されるJDBCもしくはjava.sqlパッケージ
 ③データベースを提供している企業が提供するJDBCドライバ
 ④MySQLやPostgreなどのデータベース

 「java.sqlパッケージ」はJavaプログラムとJDBCドライバの間に位置しており、その役割は、利用可能なJDBCドライバを管理し、適切なJDBCドライバを用いてデータベースに接続することです。
 「JDBCドライバ」は実際にデータベースに接続し、データベースの操作を実行する機能を持っています。データベースごとにドライバが異なるため、利用するデータベースに応じて適切なドライバを追加しておく必要があります。

それではどういった種類のJDBCドライバがあるのでしょうか。それぞれの特徴を解説します。

3. JDBCドライバ


JDBCを使って、特定のデータベースに接続するためには、そのデータベースごとに専用のドライバが必要になります。数多くのデータベース・ベンダやミドルウェア・ベンダが、さまざまな JDBCドライバを提供していますが、その種類は実装方法によって、次の4つのタイプに分けられます。

① Type 1 ドライバー(JDBC-ODBCブリッジドライバ)

 JDBCからの呼び出しをODBC(Open Database Connectivity)呼び出しに変換してデータベースにアクセスする事ができるブリッジコンポーネントです。ODBCドライバを経由してデータベースに接続することになるので、JDBC-ODBCドライバを使用するクライアントマシンにODBCドライバがインストールされていないと使用できません。

② Type 2 ドライバー(ネイティブAPIパートラップドライバー)

 JDBCからの呼び出しをDBMS固有のクライアントAPI呼び出しに変換するブリッジコンポーネントです。つまりデータベースを提供している企業が固有に持つC言語やC++言語を使用してデータベースへアクセスするということです。データベースアクセスのためのミドルウェアを利用して、データベースへ接続するため、データベース接続に必要な各データベース固有のミドルウェアが必要になってきます。

③ Type 3 ドライバー(ネットプロトコルドライバ)

 データベースとクライアントとの間に中継サーバーを介しデータベースにアクセスします。アクセスの際にネットワークプロトコルを使用します。JDBCドライバは、データベースに依存しない通信方式を用いて中継サーバーと接続し、中間サーバーはデータベース固有のミドルウエアを利用してデータベースへ接続します。中継サーバーが必要になるため、システムの構成が複雑になりますが、クライアント側にデータベースクライアントを設置する必要がない場合に便利に使用できます。

④ Type 4 ドライバー(ネイティブプロトコルドライバーまたは純粋Javaドライバー)

 データベースが固有で持ってるミドルウエア部分をすべて、JDBCドライバ内部に直接実装し、JDBCが直接データベースへ接続します。JDBCドライバ内部にデータベース固有のミドルウエア部分を実装しているため、システムの構成をシンプルにすることができますが、ドライバのサイズは大きくなってしまいます。つまり、Javaプログラムはプラットフォームに依存せずにすみます。

では最後にJDBCを使ってデータベースにアクセスするコードを紹介します。

4. アクセス例


この例では、MySQLデータベースに接続し、"users"テーブルからデータを取得する方法を示しています。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) {
        // データベース接続情報
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        // JDBCドライバーのロード
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }

        // データベースへの接続
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // SQLクエリの準備
            String sql = "SELECT * FROM users";
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
                // SQLクエリの実行
                try (ResultSet rs = pstmt.executeQuery()) {
                    // 結果の処理
                    while (rs.next()) {
                        int id = rs.getInt("id");
                        String name = rs.getString("name");