Laster inn JDBC-drivere

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Introduksjon

JDBC er et sett med spesifikasjoner som definerer API- og SPI-delene av kontrakten for Java Database Connectivity. Standarden definerer JDBC-driverabstraksjonen som det primære inngangspunktet for interaksjon med en database.

I denne opplæringen tar vi en titt på noen av de grunnleggende trinnene som trengs for å laste JDBC-drivere.

2. JDBC-drivere

For å koble til en database, må vi få en forekomst av en JDBC-driver.

Vi kan få det gjennom DriverManager ved å spesifisere JDBC URL-tilkoblingsstreng. En slik URL inneholder typen databasemotor, databasenavn, vertsnavn og port, samt andre tilkoblingsparametere som er spesifikke for databaseleverandøren.

Ved hjelp av tilkoblingsstrengen kan vi få tak i et databaseforbindelsesobjekt, som er den grunnleggende enheten for kommunikasjon med databasen i JDBC:

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

Hvordan vet sjåførlederen hvilken driver som skal brukes hvis den eneste indikasjonen er den angitte URL-en?

Det kan være mange JDBC-drivere på klassestien, så det må være en måte å skille hver sjåfør unikt på.

3. Legacy Approach

Før JDBC versjon 4 og Java SE 1.6 var det ingen generell mekanisme i JVM som gjorde det mulig å oppdage og registrere tjenester automatisk. På grunn av det var det nødvendig med et manuelt trinn for å laste JDBC-førerklassen med navn:

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

Klasselastingsprosessen utløser en statisk initialiseringsrutine som registrerer driverforekomsten med DriverManager og knytter denne klassen til databasemotoridentifikatoren, for eksempel orakel eller postgres.

Etter at registreringen er fullført, kan vi bruke denne identifikatoren i JDBC URL som jdbc: orakel.

En typisk driverregistreringsrutine vil instansiere førerinstansen og overføre den til DriverManager.registerDriver metode:

public static void register () kaster SQLException {if (isRegistered ()) {throw new IllegalStateException ("Driver er allerede registrert. Den kan bare registreres en gang."); } annet {Driver registeredDriver = new Driver (); DriverManager.registerDriver (registeredDriver); Driver.registeredDriver = registeredDriver; }}

Eksemplet over viser registrering av Postgres JDBC-driver hos DriverManager. Den utløses av JVM som en del av den statiske initialisereren.

Det er mulig å automatisere dette trinnet delvis med den eldre tilnærmingen ved å stille inn jdbc.drivers systemegenskap:

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

Når denne egenskapen er spesifisert, vil driveradministratoren automatisk prøve å laste den spesifiserte JDBC-driveren.

4. JDBC 4-tilnærming

Problemet med automatisk funn av tjenester ble løst med Java 1.6 og tjenesteleverandørmekanismen. Det gjør det mulig for tjenesteleverandører å erklære sine tjenester ved å plassere dem under META-INF / tjenester inne i JAR-filen som inneholder tjenestene.

Denne mekanismen registrerer sjåføren automatisk slik at det manuelle trinnet for å laste klassen ikke lenger er nødvendig. Men selv med tjenesteleverandøren på plass, vil manuell klasseinnlasting ikke føre til feil. Det er helt lovlig å påkalle driverlading eksplisitt med nylige JVM-er og JDBC 4-drivere.

Tjenesteleverandørspesifikasjonen erstatter ganske enkelt manuell klasselasting med en deklarativ tilnærming. For eksempel har PostgreSQL JDBC-driveren en enkelt fil under META-INF / tjenester /. Filnavnet er java.sql. driver (som er en veletablert konvensjon for JDBC-drivere). Den inneholder det fullt kvalifiserte klassenavnet til JDBC-driveren, som i dette tilfellet er org.postgresql.Driver.

5. Konklusjon

I denne artikkelen har vi gjennomgått grunnleggende konsepter rundt JDBC, samt forskjellige metoder for å laste JDBC-drivere, med en forklaring på hver tilnærming.

Som vanlig er hele kildekoden for artikkelen tilgjengelig på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET