Java >> Java チュートリアル >  >> Tag >> Jdbc

JDBC ドライバーのロード

1.はじめに

JDBC は、Java Database Connectivity の契約の API および SPI 部分を定義する一連の仕様です。標準では、JDBC ドライバーの抽象化を、データベースとやり取りするための主要なエントリ ポイントとして定義しています。

このチュートリアルでは、JDBC ドライバーをロードするために必要な基本的な手順のいくつかを見ていきます。

2. JDBC ドライバー

データベースに接続するには、JDBC ドライバーのインスタンスを取得する必要があります。

DriverManager から取得できます JDBC URL 接続文字列を指定します。このような URL には、データベース エンジンのタイプ、データベース名、ホスト名、ポート、およびデータベース ベンダーに固有のその他の接続パラメーターが含まれます。

接続文字列を使用して、JDBC でのデータベースとの通信の基本単位であるデータベース接続オブジェクトを取得できます :

Connection con = DriverManager.getConnection(
   "jdbc:postgresql://localhost:21500/test?user=fred&password=secret&ssl=true");

指定された URL のみを示す場合、ドライバー マネージャーはどのドライバーを使用するかをどのように判断しますか?

クラスパスには多数の JDBC ドライバーが存在する可能性があるため、各ドライバーを一意に区別する方法が必要です。

3.従来のアプローチ

JDBC バージョン 4 および Java SE 1.6 より前のバージョンでは、サービスを自動的に検出および登録できるようにする汎用メカニズムが JVM にありませんでした。そのため、JDBC ドライバー クラスを名前でロードする手動の手順が必要でした:

Class.forName("oracle.jdbc.driver.OracleDriver");

クラスのロード プロセスは、ドライバー インスタンスを DriverManager に登録する静的初期化ルーチンをトリガーします。 このクラスを oracle などのデータベース エンジン識別子に関連付けます。 または postgres .

登録が完了したら、この識別子を JDBC URL 内で jdbc:oracle として使用できます。 .

一般的なドライバー登録ルーチンは、ドライバー インスタンスをインスタンス化し、それを DriverManager.registerDriver に渡します。 メソッド:

public static void register() throws SQLException {
    if (isRegistered()) {
        throw new IllegalStateException("Driver is already registered. It can only be registered once.");
    } else {
        Driver registeredDriver = new Driver();
        DriverManager.registerDriver(registeredDriver);
        Driver.registeredDriver = registeredDriver;
    }
}

上記の例は、DriverManager を使用した Postgres JDBC ドライバーの登録を示しています。 .静的初期化子の一部として JVM によってトリガーされます。

従来のアプローチでも、このステップを部分的に自動化することが可能です jdbc.drivers を設定することによって システム プロパティ:

java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver

このプロパティが指定されている場合、ドライバー マネージャーは指定された JDBC ドライバーを自動的にロードしようとします。

4. JDBC 4 アプローチ

自動サービス検出の問題は、Java 1.6 とサービス プロバイダ メカニズムで解決されました .これにより、サービス プロバイダーはサービスを META-INF/services の下に置くことでサービスを宣言できます。 サービスを含む JAR ファイル内。

このメカニズムにより、ドライバーが自動的に登録されるため、クラスを手動でロードする必要がなくなります。ただし、サービス プロバイダーが配置されていても、手動でクラスをロードしてもエラーは発生しません。最近の JVM および JDBC 4 ドライバーを使用して、ドライバーのロードを明示的に呼び出すことは完全に合法です。

サービス プロバイダーの仕様は、手動のクラス ローディングを宣言的なアプローチに置き換えるだけです。たとえば、PostgreSQL JDBC ドライバーには、META-INF/services/ の下に 1 つのファイルがあります。 .ファイル名は java.sql.Driver です (これは、JDBC ドライバーの確立された規則です)。これには、JDBC ドライバーの完全修飾クラス名 (この場合は org.postgresql.Driver) が含まれています。 .

5.結論

この記事では、JDBC に関する基本的な概念と、JDBC ドライバーをロードするためのさまざまな方法を、それぞれのアプローチの説明とともに確認しました。

いつものように、この記事の完全なソース コードは GitHub で入手できます。


Java タグ