Laden von JDBC-Treibern

Java Top

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs

1. Einleitung

JDBC ist eine Reihe von Spezifikationen, die die API- und SPI-Teile des Vertrags für Java Database Connectivity definieren. Der Standard definiert die JDBC-Treiberabstraktion als primären Einstiegspunkt für die Interaktion mit einer Datenbank.

In diesem Tutorial werden einige grundlegende Schritte zum Laden von JDBC-Treibern vorgestellt.

2. JDBC-Treiber

Um eine Verbindung zu einer Datenbank herzustellen, müssen wir eine Instanz eines JDBC-Treibers erhalten.

Wir können es über den DriverManager erhalten, indem wir die JDBC-URL-Verbindungszeichenfolge angeben . Eine solche URL enthält den Typ des Datenbankmoduls, den Datenbanknamen, den Hostnamen und den Port sowie andere Verbindungsparameter, die für den Datenbankanbieter spezifisch sind.

Mithilfe der Verbindungszeichenfolge können wir ein Datenbankverbindungsobjekt erhalten, das die grundlegende Kommunikationseinheit mit der Datenbank in JDBC darstellt :

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

Woher weiß der Treibermanager, welchen Treiber er verwenden soll, wenn der einzige Hinweis die angegebene URL ist?

Der Klassenpfad enthält möglicherweise viele JDBC-Treiber. Daher muss es eine Möglichkeit geben, jeden Treiber eindeutig zu unterscheiden.

3. Legacy-Ansatz

Vor JDBC Version 4 und Java SE 1.6 gab es in der JVM keinen generischen Mechanismus, mit dem Dienste automatisch erkannt und registriert werden konnten. Aus diesem Grund war ein manueller Schritt erforderlich, um die JDBC-Treiberklasse nach Namen zu laden:

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

Der Klassenladevorgang löst eine statische Initialisierungsroutine aus, die die Treiberinstanz beim DriverManager registriert und diese Klasse mit der Datenbankmodul- ID wie Oracle oder Postgres verknüpft .

Nach Abschluss der Registrierung können wir diesen Bezeichner in der JDBC-URL als jdbc: oracle verwenden .

Eine typische Treiberregistrierungsroutine instanziiert die Treiberinstanz und übergibt sie an die DriverManager.registerDriver- Methode:

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; } }

Das obige Beispiel zeigt die Postgres JDBC- Treiberregistrierung beim DriverManager . Es wird von der JVM als Teil des statischen Initialisierers ausgelöst.

Es ist möglich, diesen Schritt auch mit dem Legacy-Ansatz teilweise zu automatisieren, indem die Systemeigenschaft jdbc.drivers festgelegt wird:

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

Wenn diese Eigenschaft angegeben wird, versucht der Treibermanager automatisch, den angegebenen JDBC-Treiber zu laden.

4. JDBC 4-Ansatz

Das Problem der automatischen Diensterkennung wurde mit Java 1.6 und dem Dienstanbietermechanismus gelöst . Es ermöglicht Dienstanbietern, ihre Dienste zu deklarieren, indem sie in der JAR-Datei, die die Dienste enthält, unter META-INF / services abgelegt werden.

Dieser Mechanismus registriert den Treiber automatisch, sodass der manuelle Schritt zum Laden der Klasse nicht mehr erforderlich ist. Selbst wenn der Dienstanbieter eingerichtet ist, führt das manuelle Laden der Klasse nicht zu einem Fehler. Es ist völlig legal, das Laden von Treibern explizit mit aktuellen JVMs und JDBC 4-Treibern aufzurufen.

Die Dienstanbieterspezifikation ersetzt einfach das manuelle Laden von Klassen durch einen deklarativen Ansatz. Beispielsweise verfügt der PostgreSQL-JDBC-Treiber über eine einzelne Datei unter META-INF / services / . Der Dateiname lautet java.sql.Driver (eine etablierte Konvention für JDBC-Treiber). Es enthält den vollständig qualifizierten Klassennamen des JDBC-Treibers, in diesem Fall org.postgresql.Driver .

5. Schlussfolgerung

In diesem Artikel haben wir grundlegende Konzepte rund um JDBC sowie verschiedene Methoden zum Laden von JDBC-Treibern erläutert und die einzelnen Ansätze erläutert.

Wie üblich ist der vollständige Quellcode für den Artikel auf GitHub verfügbar.

Java unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs