JDBC(Java DataBase Connectivity)とは

Java

JDBC(Java DataBase Connectivity)とは

JDBC は Java アプリケーションからデータベース間へアクセスするためのインターフェイス(API・仕様)です。

Java アプリケーションには次の 2 つがあります。

  • 誰かが作った Java アプリケーション(SQL クライアントツールなど)
  • 自分が作った Java アプリケーション(自分でソースコードを書きます)

Java アプリケーションからデータベースへは次の順序でアクセスします。このうち 2~4 を JDBC と呼びます。

  1. Java アプリケーション
  2. JDBC API(JDK 1.1 以降に含まれる)
  3. JDBC ドライバーマネージャー
  4. JDBC ドライバー API
  5. JDBC ドライバー
  6. データベース

JDBC の利点

JDBC を利用すると、Java アプリケーションとデータベースがお互いのことを考えなくて良くなります。

Java アプリケーション目線

  • Java アプリケーション開発者は JDBC API だけを覚えればいい
  • MySQL 用のコードだとか PostgreSQL 用のコードだとか、データベースを意識しなくていい
  • 別のデータベースで使っていたソースコードを使い回せる

JDBC API の主なクラス・インターフェイスは以下のとおりです。

クラス・インターフェイスできること
DriverManagerJDBCドライバを管理するクラス
Connectionデータベースへ接続(セッション)
StatementSQL クエリのリクエスト
ResultSetSQL クエリのレスポンス

例:下記のコードで JDBC ドライバーを提供するすべてのデータベースにアクセスできる。

DriverManager.getConnection(url, user, password);

データベース目線

  • データベース開発者は Java アプリケーションに対しては JDBC Driver だけを作ればいい
  • このアプリの命令だとか、あのアプリの命令だとか、Java アプリケーションを気にしなくていい

以下のように各データベースが JDBC のインターフェイスに従ってドライバーを作っている。

JDBC Driver for MySQL (Connector/J)
https://www.mysql.com/jp/products/connector/
JDBC API に従って MySQL を動かすプログラムと言える。

PostgreSQL JDBC Driver
https://jdbc.postgresql.org/
JDBC API に従って PostgreSQL を動かすプログラムと言える。

【実践】JDBC を利用してデータベースにアクセス

下記のデータベースに対して、JDBC ドライバーを使用して Java アプリケーションからアクセスしてみます。

mysql> use test;
Database changed

mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | foo  |
|    2 | bar  |
+------+------+
2 rows in set (0.00 sec)

手順・Java アプリケーションのサンプルコード

  1. JDBC ドライバーを前述したリンク先からダウンロード(もしくは下記のyum)
    $ yum sudo yum install mysql-connector-java
  2. Java アプリケーションを作成する
    $ vim Connect_MySQL_JDBC.java
    import java.sql.*;
    
    public class Connect_MySQL_JDBC {
            public static void main(String[] args) {
                    try {
                            String url = "jdbc:mysql://localhost/test"; //:<データベース製品名>://<ホスト名>/<データベース名>
                            String user = "root"; //データベースにアクセスする際のユーザー名
                            String password = System.getenv("PASSWORD"); //データベースにログインする際のパスワードに変えてください
                            
                            Class.forName("com.mysql.jdbc.Driver"); //ドライバーの指定
                            Connection conn = DriverManager.getConnection(url, user, password); //データベースへの接続
                            Statement stmt = conn.createStatement(); //ステートメントの作成
                            ResultSet rs = stmt.executeQuery("SELECT * FROM test;"); //ステートメントでSQLを実行
    
                            //SQL実行結果の戻り値    
                            while(rs.next()){
                                System.out.print(rs.getString("id")+" ");
                                System.out.println(rs.getString("name"));
                            }
    
                            //使用したリソースの開放
                            rs.close();
                            conn.close();
                    } catch(SQLException e) {
                            e.printStackTrace();
                    } catch(Exception e) {
                            e.printStackTrace();
                    }
            }
    }
  3. Java アプリケーションを実行する
    //JDBC ドライバーにパスを通してコンパイル
    $ javac -classpath /usr/share/java/mysql-connector-java.jar Connect_MySQL_JDBC.java
    
    //JDBC ドライバーにパスを通して実行
    $ java -classpath /usr/share/java/mysql-connector-java.jar: Connect_MySQL_JDBC
    1 foo
    2 bar

test データベースの test テーブルに対して SELECT * FROM test; が発行できたことがわかります。

参考資料

Java JDBC API
JDBC (1)

https://www.neclearning.jp/sample_text/JV945-1.pdf

そういえばなんで Java のコネクタだけ JDBCって言うんでしょうね?

Python なら PDBC、 C言語なら CDBC って言いそうな気がするんですが。

0

コメント

タイトルとURLをコピーしました