Programmering

Hva er JDBC? Introduksjon til Java Database Connectivity

JDBC (Java Database Connectivity) er Java API som klarer å koble til en database, utstede spørsmål og kommandoer, og håndtere resultatsett hentet fra databasen. Utgitt som en del av JDK 1.1 i 1997, var JDBC en av de første komponentene som ble utviklet for Java-persistenslaget.

JDBC ble opprinnelig tenkt som et API på klientsiden, slik at en Java-klient kunne samhandle med en datakilde. Det endret seg med JDCB 2.0, som inkluderte en valgfri pakke som støttet server-side JDBC-tilkoblinger. Hver nye JDBC-utgivelse siden den gang har omtalt oppdateringer til både klientsiden-pakken (java.sql) og serversiden-pakken (javax.sql). JDBC 4.3, den nyeste versjonen av dette, ble utgitt som en del av Java SE 9 i september 2017.

Denne artikkelen presenterer en oversikt over JDBC, etterfulgt av en praktisk introduksjon til bruk av JDBC API for å koble en Java-klient med SQLite, en lett relasjonsdatabase.

Hvordan JDBC fungerer

JDBC er utviklet som et alternativ til C-basert ODBC (Open Database Connectivity) API, og tilbyr et grensesnitt på programmeringsnivå som håndterer mekanikken til Java-applikasjoner som kommuniserer med en database eller RDBMS. JDBC-grensesnittet består av to lag:

  1. JDBC API støtter kommunikasjon mellom Java-applikasjonen og JDBC-manager.
  2. JDBC-driveren støtter kommunikasjon mellom JDBC-lederen og databasedriveren.

JDBC er den vanlige API-en som applikasjonskoden din samhandler med. Under det er den JDBC-kompatible driveren for databasen du bruker.

Figur 1 er en arkitektonisk oversikt over JDBC i Java-persistenslaget.

JavaWorld /

Bruker JDBC for å koble til en database

En av de heldige fakta ved programmering i Java-økosystemet er at du sannsynligvis vil finne en stabil JDBC-databankontakt for hvilken database du velger. I denne opplæringen bruker vi SQLite for å bli kjent med JDBC, hovedsakelig fordi den er så enkel å bruke.

Trinnene for å koble til en database med JDBC er som følger:

  1. Installer eller finn databasen du vil ha tilgang til.
  2. Inkluder JDBC-biblioteket.
  3. Forsikre deg om at JDBC-driveren du trenger er på klassestien din.
  4. Bruk JDBC-biblioteket for å opprette en forbindelse til databasen.
  5. Bruk tilkoblingen til å utstede SQL-kommandoer.
  6. Lukk forbindelsen når du er ferdig.

Vi vil gå gjennom disse trinnene sammen.

Finne en JDBC-driver

For å finne en driver for databasen du vil bruke, gjør du bare et websøk etter databasen og JDBC. For eksempel å skrive inn "mysql jdbc driver"vil slå opp en driver for MySQL. Jeg utfordrer deg til å finne en Java-kompatibel database uten en JDBC-driver!

Trinn 1. Last ned og installer SQLite

SQLite er en veldig kompakt database. Det er ikke ment for produksjonsbruk, men er et godt valg for å prøve ting raskt. SQLite bruker en fil som sin funksjonelle database, uten å kreve noen tjeneste- eller demoninstallasjoner.

For å komme i gang med denne demoen, fortsett og last ned SQLite-eksempeldatabasen. Pakk ut .db fil og lagre den et sted du ikke vil glemme.

Denne filen inneholder både en funksjonell filbasert database og eksempelskjema og data vi kan bruke.

SQL og JDBC

NoSQL har blitt populært det siste tiåret, men relasjonsdatabaser er fortsatt den vanligste typen datalagring i bruk. EN relasjonsdatabase er et strukturert depot som består av tabeller med kolonner og rader. SQL (Structured Query Language) er språkdata som arkitekter bruker for å lage ting som å opprette, lese, oppdatere og slette nye poster i en relasjonsdatabase. JDBC er en adapterlag fra Java til SQL: det gir Java-utviklere et felles grensesnitt for å koble til en database, utstede spørsmål og kommandoer, og administrere svar.

Trinn 2. Importer JDBC til Java-applikasjonen

Vi kan gjøre kodingen vår i en IDE, men koding direkte i en tekstredigerer vil bedre demonstrere JDBCs enkelhet. For å begynne må du ha en kompatibel JDK-installasjon for operativsystemet ditt.

Forutsatt at du har Java-plattformutviklerverktøyene installert, kan vi starte med å lage et enkelt Java-program. I teksteditoren limer du inn koden som vises i Oppføring 1. Ring denne filen WhatIsJdbc.java.

Oppføring 1. Et enkelt Java-program

 klasse WhatIsJdbc {public static void main (String args []) {System.out.println ("Hello JavaWorld"); }} 

Nå kompilerer du koden ved å skrive inn kommandoen: javac WhatIsJdbc.java. Kompilering vil sende ut WhatIsJdbc.class fil. Utfør denne filen fra kommandolinjen med samtalen: java WhatIsJdbc.

[Se "Hva er JDK? Introduksjon til Java Developer Kit" for mer om samhandling med JDK på kommandolinjen.]

Når du har et grunnleggende Java-program, kan du inkludere JDBC-bibliotekene. Lim inn koden fra oppføring 2 i spissen for det enkle Java-programmet.

Oppføring 2. JDBC import

 importere java.sql.Connection; importere java.sql.DriverManager; importere java.sql.SQLException; importer java.sql.ResultSet; importere java.sql.Statement; 

Hver av disse importene gir tilgang til en klasse som muliggjør standard Java-databasetilkobling:

  • Forbindelse representerer forbindelsen til databasen.
  • DriverManager oppnår tilkoblingen til databasen. (Et annet alternativ er Datakilde, brukes til tilkoblingssamling. )
  • SQLException håndterer SQL-feil mellom Java-applikasjonen og databasen.
  • ResultatSett og Uttalelse modeller dateresultatene og SQL-setningene.

Vi ser hver av disse i aksjon snart.

Trinn 3. Legg JDBC-driveren til klassestien din

Deretter legger du til SQLite-driveren i klassestien din. EN JDBC-driver er en klasse som implementerer JDBC API for en bestemt database.

Last ned SQLite-driveren fra GitHub. Sørg for å få det siste .krukke arkiv og lagre den et sted du vil huske.

Neste gang du kjører Java-programmet ditt, vil du trekke det .krukke arkiv inn via klassestien. Det er flere måter å sette klassestien på. Oppføring 3 viser hvordan du gjør det ved hjelp av en kommandolinjebryter.

Oppføring 3. Utføre SQLite-driver på Java-klassestien

 java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar :. WhatIsJdbc 

Legg merke til at vi har satt klassestien til å peke på føreren og den lokale katalogen; på denne måten vil Java fremdeles finne klassefilen vår.

Trinn 4. Få en databaseforbindelse

Klassestien har nå tilgang til sjåføren. Nå endrer du den enkle Java-applikasjonsfilen slik at den ser ut som programmet i Listing 4.

Oppføring 4. Bruk av JDBC Connection-klassen til å koble til SQLite

 importere java.sql.Connection; importere java.sql.DriverManager; importere java.sql.SQLException; importere java.sql.ResultSet; importere java.sql.Statement; klasse WhatIsJdbc {public static void main (String [] args) {Connection conn = null; prøv {String url = "jdbc: sqlite: path-to-db / chinook / chinook.db"; conn = DriverManager.getConnection (url); System.out.println ("Har du det!"); } catch (SQLException e) {throw new Error ("Problem", e); } til slutt {prøv {if (conn! = null) {conn.close (); }} fange (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

Kompilere og utføre denne koden. Forutsatt at alt går bra, vil du få en bekreftende melding.

Fant ingen egnet sjåfør?

Hvis du har mottatt en feil som ser ut som "Ingen egnet driver funnet for jdbc: sqlite, "så må du besøke klassestien og sørge for at den peker mot driveren du lastet ned. Mislykket driverforbindelse er den vanligste snublesteinen for nybegynnere som bruker JDBC. Ikke svett den, bare fikse den.

Nå er vi klare for noen SQL-kommandoer.

Trinn 5. Spørre databasen

Med live-tilkoblingsobjektet i hånden kan vi gjøre noe nyttig, som å spørre databasen. Oppføring 5 viser hvordan du kan spørre om SQLite ved hjelp av JDBC Forbindelse og Uttalelse gjenstander.

Oppføring 5. Spørring av databasen med JDBC

 importere java.sql.Connection; importere java.sql.DriverManager; importere java.sql.SQLException; importere java.sql.ResultSet; importere java.sql.Statement; klasse WhatIsJdbc {public static void main (String [] args) {Connection conn = null; prøv {String url = "jdbc: sqlite: path-to-db-file / chinook / chinook.db"; conn = DriverManager.getConnection (url); Uttalelse stmt = null; Strengspørsmål = "velg * fra album"; prøv {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (spørring); while (rs.next ()) {String name = rs.getString ("title"); System.out.println (navn); }} catch (SQLException e) {throw new Error ("Problem", e); } til slutt {if (stmt! = null) {stmt.close (); }}} fangst (SQLException e) {throw new Error ("Problem", e); } til slutt {prøv {if (conn! = null) {conn.close (); }} fange (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

I oppføring 5 bruker vi vår Forbindelse innvende for å oppnå en Uttalelse gjenstand: conn.createStatement (). Vi bruker deretter dette objektet til å utføre en SQL-spørring: stmt.executeQuery (spørring).

De executeQuery kommandoen returnerer a ResultatSett objekt, som vi deretter bruker til å iterere over dataene med mens (rs.next ()). I dette eksemplet bør du se albumtitlene vi har spurt om som utdata.

Legg merke til at vi også stengte forbindelsen, via en samtale til conn.close ().

Nettverkstilkoblinger med JDBC

Datatilkoblingsstrengen i oppføring 5 er for en lokal tilkobling: jdbc: sqlite: path-to-db-file / chinook / chinook.db. For å få tilgang til databasen via et nettverk, må tilkoblingsstrengen inkludere nettverks-URL og (vanligvis) legitimasjon for å få tilgang til den.

Gjør mer med JDBC

Så langt har vi dekket det grunnleggende om å bruke JDBC for å koble til en database og utstede SQL-kommandoer. Samtidig som Uttalelsers og ResultatSetts fungerer bra for vanlige scenarier, vil du sannsynligvis trenge flere alternativer for større eller mer komplekse applikasjoner. Heldigvis fortsetter JDBC-biblioteket å utvikle seg for å møte de fleste behov for databasetilgang.

PreparedStatements

En enkel måte å øke fleksibiliteten til koden din er å erstatte Uttalelse klasse med PreparedStatement, som vist i liste 6.

Oppføring 6. Bruke JDBC PreparedStatements

 String prepState = "sett inn i albumverdier (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, "Uprising"); prepState.setString (2, "Bob Marley and the Wailers"); int rowsAffected = preparedStatement.executeUpdate (); 

PreparedStatement erstatter Uttalelsesine hardkodede verdier med spørsmålstegn (?). Ved hjelp av PreparedStatements optimaliserer koden din for gjenbruk: a PreparedStatement blir bare samlet en gang, og kan deretter brukes på nytt med en rekke parametere. Når kodebasen vokser, setter du bare inn nye verdier i setningen, i stedet for å hacke selve strengobjektet.

Batch oppdateringer

Hver gang et program har flere oppdateringer å utstede, kan det være til fordel for ytelsen å gjøre det i grupper. Essensen av batching er å ta flere oppdateringer og samle dem sammen, og deretter utstede dem på en gang. Oppføring 7 bruker JDBCs batchmetoder for å utføre en batchoppdatering på flere PreparedStatements.

Oppføring 7. Batching med PreparedStatement

 prepState.setString (1, "Uprising"); prepState.setString (2, "Bob Marley and the Wailers"); preparedStatement.addBatch (); prepState.setString (1, "Wildflowers"); prepState.setString (2, "Tom Petty and the Heartbreakers"); preparedStatement.addBatch (); int [] rowsAffected = preparedStatement.executeBatch (); 

JDBC-transaksjoner

Transaksjoner i relasjonsdatabaser tillater at et sett med oppdateringer pakkes inn i en interaksjon som enten lykkes eller mislykkes helt. Grunnleggende om å bruke en transaksjon via JDBC er å fortelle systemet å snu av automatisk forpliktelse, og be systemet deretter å manuelt når du er ferdig. Som standard er automatisk forpliktelse , som betyr når en executeUpdate eller executeInsert kjøres, blir kommandoen begått.

Oppføring 8 viser et lite stykke av en JDBC-transaksjon.

Oppføring 8. JDBC-transaksjoner

 connection.setAutoCommit (false); // Bruk executeUpdate flere ganger connection.commit (); 

Når connection.commit () oppstår, vil alle oppdateringene som er pakket inn, bli forsøkt, og hvis noen mislykkes, vil de alle bli rullet tilbake.

Det er mange flere funksjoner i JDBC 4.3 som er verdt å utforske, inkludert bruk CallableStatement for lagrede prosedyrer, ved hjelp av Datakilde objekter for forbedret applikasjonsytelse (spesielt via sammenkobling), og konvertering av et JDBC ResultSet til en Java Stream.

Databasespesifikke funksjoner

Selv om hver JDBC-kompatibel database tilbyr de samme kjernefunksjonene for å koble til og samhandle med en database via SQL, gjør noen databaser mer enn andre. Som et eksempel tilbyr Oracle DB resultatbufring, noe som ikke kreves av JDBC-spesifikasjonen. Her er et eksempel:

 conn.prepareStatement ("velg / * + resultat_buffer * / * fra ansatte der ansatt_id <: 1"); 

Dette eksemplet er hentet fra dokumentasjonen til Oracle's JDBC OCI Driver.

Konklusjon

JDBC er en av Javas eldste APIer, og gir en brukervennlig løsning for et av de flerårige behovene til Java-applikasjonsutvikling. Å kjenne bare noen få JDBC-samtaler demonstrert i denne artikkelen, vil få deg i gang med å bruke JDBC for å koble til praktisk talt hvilken som helst database. Når du har fått disse kommandoene nede, kan du begynne å utforske noen av de mer sofistikerte alternativene som er innebygd i JDBC.

Mens JDBC er tilstrekkelig for enklere applikasjoner, vil de fleste utviklere etter hvert se på Java Persistence API (JPA) for å utvikle et mer formelt datatilgangslag. JPA krever mer forhåndsarbeid og en mer sofistikert forståelse av applikasjonsarkitekturen, men det gir deg et mer konsistent, isolert og veldefinert lag for datatilgang. Se følgesvennen til denne artikkelen, "Hva er JPA? Introduksjon til Java Persistence API" for mer informasjon om utvikling av data-persistenslaget for Java-applikasjonene dine.

Denne historien, "Hva er JDBC? Introduksjon til Java Database Connectivity" ble opprinnelig utgitt av JavaWorld.

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