JDBC (Java DataBase Connectivity) とは

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

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

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

  1. Java アプリケーションSQL クライアントツール、自分で書いたプログラムなど)
  2. JDBC API(JDK 1.1 以降に含まれる)
  3. JDBC ドライバーマネージャー
  4. JDBC ドライバー API
  5. JDBC ドライバー
  6. データベース

なお、記事は以下の Java 入門用の記事の初回です。その他の記事は以下をご覧ください。

スポンサーリンク

JDBC の利点

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

Java アプリケーション目線

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

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

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

DriverManager.getConnection(url, user, password);

データベース目線

以下のように各データベースが 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 って言いそうな気がするんですが。