JDBC-stuurprogramma's laden

Java Top

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

1. Inleiding

JDBC is een set specificaties die de API- en SPI-onderdelen van het contract voor Java Database Connectivity definiëren. De standaard definieert de abstractie van het JDBC-stuurprogramma als het primaire toegangspunt voor interactie met een database.

In deze zelfstudie bekijken we enkele basisstappen die nodig zijn om JDBC-stuurprogramma's te laden.

2. JDBC-stuurprogramma's

Om verbinding te maken met een database, hebben we een instantie van een JDBC-stuurprogramma nodig.

We kunnen het verkrijgen via het DriverManager door de JDBC URL-verbindingsreeks op te geven. Zo'n URL bevat het type database-engine, databasenaam, hostnaam en poort, evenals andere verbindingsparameters die specifiek zijn voor de databaseleverancier.

Met behulp van de verbindingsreeks kunnen we een databaseverbindingsobject verkrijgen, dat de basiseenheid is van communicatie met de database in JDBC:

Connection con = DriverManager.getConnection ("jdbc: postgresql: // localhost: 21500 / test? User = fred & wachtwoord = geheim & ssl = true"); 

Hoe weet de bestuurderbeheerder welke bestuurder hij moet gebruiken als de enige indicatie de opgegeven URL is?

Er kunnen veel JDBC-stuurprogramma's op het klassenpad staan, dus er moet een manier zijn om elk stuurprogramma uniek te onderscheiden.

3. Legacy-aanpak

Vóór JDBC versie 4 en Java SE 1.6 was er geen generiek mechanisme in de JVM waarmee services automatisch konden worden ontdekt en geregistreerd. Daarom was een handmatige stap nodig om de JDBC-stuurprogrammaklasse op naam te laden:

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

Het klasselaadproces activeert een statische initialisatieroutine die de driverinstantie registreert met de DriverManager en associeert deze klasse met de database-engine-id, zoals orakel of postgres.

Nadat de registratie is voltooid, kunnen we deze ID gebruiken in de JDBC-URL als jdbc: oracle.

Een typische driverregistratieroutine zal de driverinstantie instantiëren en deze doorgeven aan het DriverManager.registerDriver methode:

public static void register () gooit SQLException {if (isRegistered ()) {throw nieuwe IllegalStateException ("Driver is al geregistreerd. Het kan maar één keer worden geregistreerd."); } else {Driver registeredDriver = new Driver (); DriverManager.registerDriver (registeredDriver); Driver.registeredDriver = registeredDriver; }}

Het bovenstaande voorbeeld toont de registratie van de Postgres JDBC-stuurprogramma met de DriverManager. Het wordt geactiveerd door de JVM als onderdeel van de statische initialisatieprogramma.

Het is mogelijk om deze stap gedeeltelijk te automatiseren, zelfs met de legacy-aanpak door de jdbc.drivers systeemeigenschap:

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

Wanneer deze eigenschap is opgegeven, zal de stuurprogrammabeheerder automatisch proberen het opgegeven JDBC-stuurprogramma te laden.

4. JDBC 4-benadering

Het probleem van automatische serviceopsporing is opgelost met Java 1.6 en het serviceprovidermechanisme. Het stelt dienstverleners in staat hun diensten aan te geven door ze onder te plaatsen META-INF / diensten in het JAR-bestand met de services.

Dit mechanisme registreert de bestuurder automatisch, zodat de handmatige stap om de klas te laden niet langer nodig is. Maar zelfs als de serviceprovider aanwezig is, zal het handmatig laden van klassen geen storing veroorzaken. Het is volkomen legaal om het laden van stuurprogramma's expliciet aan te roepen met recente JVM's en JDBC 4-stuurprogramma's.

De specificatie van de serviceprovider vervangt eenvoudig het handmatig laden van klassen door een declaratieve benadering. Het PostgreSQL JDBC-stuurprogramma heeft bijvoorbeeld één bestand onder META-INF / diensten /. De bestandsnaam is java.sql.Driver (wat een gevestigde conventie is voor JDBC-stuurprogramma's). Het bevat de volledig gekwalificeerde klassenaam van het JDBC-stuurprogramma, in dit geval org.postgresql.Driver.

5. Conclusie

In dit artikel hebben we basisconcepten rond JDBC besproken, evenals verschillende methoden om JDBC-stuurprogramma's te laden, met een uitleg van elke benadering.

Zoals gewoonlijk is de volledige broncode voor het artikel beschikbaar op GitHub.

Java onderkant

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

$config[zx-auto] not found$config[zx-overlay] not found