JDBC(Java DataBase Connectivity)とは

Java

JDBC(Java DataBase Connectivity)とは

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

Java アプリケーションからデータベースへは次の順序でアクセスします。

このうち 2~4 を JDBC と呼びます。

  1. Java アプリケーション(SQL クライアントツール、自分で書いたプログラムなど)
  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)

【サンプルコード】JDBC を利用してデータベースへアクセス

  1. sudo yum install mysql-connector-java
  2. 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"; //<jdbc>:<データベース製品名>://<ホスト名>/<データベース名>
                                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. JDBC ドライバーのクラスパスを通しながらコンパイル、実行します。

    javac -classpath /usr/share/java/mysql-connector-java.jar Connect_MySQL_JDBC.java
    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

コメント