java jdbc connection tutorial with programming example
Denne JDBC-tilkoblingsveiledningen forklarer grunnleggende trinn til en database med eksempler og gir JDBC-tilkoblingsstrenger for forskjellige databaser:
hvordan man skriver prøvesaker i excel
I forrige opplæring av JDBC opplæringsserie , vi lærte komponenter, arkitektur og typer drivere i Java Database Connectivity (JDBC).
I denne opplæringen vil vi diskutere trinnene for å koble til databaser ved hjelp av JDBC. Denne opplæringen viser deg hvordan du gjør JDBC-tilkobling og utfører databasoperasjoner. JDBC API fungerer som et grensesnitt mellom Java-programmet og databasen.
På slutten av denne opplæringen vil du kunne skrive Java-programmer for å koble til databaser og utføre DB-operasjoner.
Hva du vil lære:
Trinn for tilkobling av JDBC
Det er 6 grunnleggende trinn for å koble til JDBC. De er vervet i bildet nedenfor:
# 1) Importer pakker
Først må vi importere eksisterende pakker for å bruke den i Java-programmet. Import vil sørge for at JDBC API-klasser er tilgjengelige for programmet. Vi kan da bruke klassene og underklassene til pakkene.
Uansett JDBC-driver, legg til følgende importuttalelse i Java-programmet.
import java.sql.*;
Importer de andre klassene basert på funksjonaliteten du vil bruke i programmet. Last ned de aktuelle Jar-filene for databasen som du vil bruke i programmet.
Referere til forrige opplæring for koblingene for å laste ned Jar-filer for databasen din.
JDBC API 4.0 tilbyr hovedsakelig to viktige pakker:
- java.sql
- javax.sql
(i) java.sql-pakke
Denne pakken gir klasser og grensesnitt for å utføre de fleste av JDBC-funksjonene som å opprette og utføre SQL-spørringer.
Klasser / grensesnitt | Beskrivelse |
---|---|
DriverManager | Det gir grunnleggende tjenester for å administrere et sett med JDBC-drivere |
BLOB | Den representerer SQL Blob-verdien i Java-programmet |
CallableStatement | Den brukes til å utføre SQL-lagrede prosedyrer |
CLOB | Den representerer SQL Clob-verdien i Java-programmet |
Forbindelse | Det oppretter en forbindelse (økt) med en bestemt database |
Dato | Den gir støtte for Date SQL-typen |
Sjåfør | Det oppretter en forekomst av en driver med Driver Manager |
ParameterMetaData | Det er et objekt som kan brukes til å få informasjon om typene og egenskapene til hver parameter i et PreparedStatement-objekt |
PreparedStatement | Den brukes til å opprette og utføre et parameterisert spørsmål i Java-programmet |
ResultatSett | Den brukes til å få tilgang til resultatet rad for rad |
ResultatSetMetaData | Den brukes til å få informasjon om typene og egenskapene til kolonnene i et ResultSet-objekt |
RowId | Den representerer SQL ROWID-verdien |
Savepoint | Det representerer sparepunkt i transaksjonen |
SQLData | Den brukes til å kartlegge SQL User Defined Type (UDT) til en klasse i Java-program |
SQLXML | Den representerer SQL XML-typen |
Uttalelse | Den brukes til å utføre en statisk SQL-setning |
DriverPropertyInfo | Det gir driveregenskaper for å opprette en forbindelse |
SQLException | Den gir informasjon om databasefeil |
SQLTimeoutException | Det er en underklasse av SQLException som kastes når tidsavbruddet som er angitt i uttalelsen, har utløpt |
SQL-advarsel | Det er et unntak som gir informasjon om advarsler om tilgang til databaser |
Struktur | Det er en standard kartlegging i Java-program for SQL-strukturert type |
(ii) javax.sql-pakke
Det er et JDBC-utvidelses-API og gir datatilgang og prosessering på serversiden i Java-programmet.
Klasser / grensesnitt | Beskrivelse |
---|---|
ConnectionEvent | Den gir informasjon om forekomsten av tilkoblingsrelaterte hendelser |
CommonDataSource | Det er et grensesnitt som definerer metodene som er vanlige mellom DataSource, XADataSource og ConnectionPoolDataSource |
ConnectionPoolDataSource | Det er en fabrikk for PooledConnection-objekter |
Datakilde | Det er en fabrikk for tilkoblinger til den fysiske datakilden som objektet representerer |
PooledConnection | Den brukes til å administrere Connection Pool |
RowSet | Den gir støtte til JDBC API for komponentmodell for Java-bønner |
RowSetMetadata | Den har informasjonen om kolonnene i et RowSet-objekt |
ConnectionEventListener | Den brukes til å registrere PooledConnection-objekthendelser |
RowSetEvent | Den genereres når en hendelse inntreffer et Rowset-objekt |
StatementEvent | Den sendes til alle StatementEventListeners som ble registrert med en generert PooledConnection |
# 2) Last driver
Først bør vi laste inn / registrere driveren i programmet før vi kobler til databasen. Du trenger å registrere den bare én gang per database i programmet.
Vi kan laste sjåføren på følgende to måter:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Klasse for navn ()
På denne måten lastes førerklassefilen inn i minnet ved kjøretid. Det laster implisitt sjåføren. Under lasting vil sjåføren automatisk registrere seg med JDBC.
DB-navn | JDBC drivernavn |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Oracle | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MS Access | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
Merk: metoden forName () er bare gyldig for JDK-kompatible virtuelle maskiner.
(ii) DriverManager.registerDriver ()
DriverManager er en innebygd klasse som er tilgjengelig i pakken java.sql. Det fungerer som en megler mellom Java-applikasjon og database som du vil koble til. Før du kobler deg til databasen, må du registrere driveren hos DriverManager. Hovedfunksjonen til DriverManager er å laste inn driverklassen til databasen og opprette en forbindelse med DB.
Offentlig statisk ugyldighetsregister Driver (driver) - Denne metoden vil registrere driveren hos Driver Manager. Hvis sjåføren allerede er registrert, vil den ikke gjøre noe.
- Det vil kaste SQLException hvis databasefeil oppstår.
- Det vil kaste NullPointerException hvis sjåføren er null.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
Slik kan du registrere driveren for databasen din ved å sende den som en parameter.
# 3) Opprett tilkobling
Etter at du har lastet inn driveren, er neste trinn å opprette og etablere forbindelsen. Når det er nødvendig, importeres pakker og drivere lastes inn og registreres, så kan vi gå for å opprette en databaseforbindelse.
DriverManager-klassen har getConnection-metoden, vi vil bruke denne metoden for å få forbindelse til databasen. For å ringe getConnection () -metoden, må vi passere 3 parametere. De tre parametrene er streng datatype URL, et brukernavn og et passord for å få tilgang til databasen.
GetConnection () -metoden er en overbelastet metode. De to metodene er:
- getConnection (URL, brukernavn, passord); - Den har tre parametere URL, brukernavn, passord.
- getConnection (URL); - Den har bare en parameter. URL har også et brukernavn og passord.
Følgende tabell viser JDBC-tilkoblingsstrenger for de forskjellige databasene:
Database | Tilkoblingsstreng / DB URL |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Oracle | jdbc: orakel: tynn: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; DatabaseName = |
MS Access | jdbc: ucanaccess: // DATABASE_PATH |
PostgreSQL | jdbc: postgresql: // HOST_NAME: PORT / DATABASE_NAME |
IBM DB2 | jdbc: db2: // HOSTNAME: PORT / DATABASE_NAME |
TeraData | jdbc: teradata: // HOSTNAME / database =, tmode = ANSI, charset = UTF8 |
Eksempel:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Her i dette eksemplet,
- tynn refererer til Driver-typen.
- lokal vert er der Oracle-databasen kjører.
- 1521 er portnummeret du skal koble til DB.
- kjøretøy - SID
- System - Brukernavn for å koble til Oracle Database.
- Pass123 @ - Passord
# 4) Opprett og utfør erklæring
Når forbindelsen er etablert, kan vi samhandle med den tilkoblede databasen. Først må vi lage uttalelsen for å utføre SQL-spørringen og deretter utføre setningen.
(i) Lag uttalelse
Nå skal vi opprette setningsobjektet som kjører spørringen med den tilkoblede databasen. Vi bruker createStatement-metoden til Forbindelse klasse for å opprette spørringen.
Det er tre uttalelsesgrensesnitt som er tilgjengelige i pakken java.sql. Disse er forklart nedenfor:
en uttalelse
Dette grensesnittet brukes til å implementere enkle SQL-setninger uten parameter. Den returnerer ResultSet-objektet.
Statement statemnt1 = conn.createStatement();
b) PreparedStatement
Dette PreparedStatement-grensesnittet utvider uttalelsesgrensesnittet. Så den har flere funksjoner enn Statement-grensesnittet. Den brukes til å implementere parametrerte og forhåndskompilerte SQL-setninger. Programmets ytelse øker fordi den bare kompilerer spørringen en gang.
Det er enkelt å bruke dette grensesnittet med en ny parameter. Den støtter IN-parameteren. Selv vi kan bruke denne uttalelsen uten noen parameter.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
CallableStatement-grensesnitt utvider PreparedStatement-grensesnittet. Så den har flere funksjoner enn PreparedStatement-grensesnittet. Den brukes til å implementere en parameterisert SQL-setning som påkaller prosedyre eller funksjon i databasen. En lagret prosedyre fungerer som en metode eller funksjon i en klasse. Den støtter parametrene IN og OUT.
CallableStatement-forekomsten opprettes ved å ringe preparCall-metoden til Connection-objektet.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Utfør spørringen
Det er fire viktige metoder for å utføre spørringen i Statement-grensesnittet. Disse er forklart nedenfor:
- ResultSet executeQuery (streng sql)
- int executeUpdate (streng sql)
- boolean execute (String sql)
- int () executeBatch ()
a) ResultSet executeQuery (streng SQL)
Metoden executeQuery () i Uttalelsesgrensesnitt brukes til å utføre SQL-spørringen og hente verdiene fra DB. Den returnerer ResultSet-objektet. Normalt vil vi bruke denne metoden for SELECT-spørringen.
b) executeUpdate (streng sql)
Metoden executeUpdate () brukes til å utføre verdispesiserte spørsmål som INSERT, UPDATE, DELETE (DML-setninger) eller DDL-setninger som ikke gir noe. For det meste vil vi bruke denne metoden for å sette inn og oppdatere.
c) utfør (streng sql)
Metoden execute () brukes til å utføre SQL-spørringen. Det kommer tilbake ekte hvis den utfører SELECT-spørringen. Og den kommer tilbake falsk hvis den utfører INSERT- eller UPDATE-spørringen.
d) executeBatch ()
Denne metoden brukes til å utføre en gruppe SQL-spørringer til databasen, og hvis alle spørsmålene blir utført vellykket, returnerer den en rekke oppdateringstall. Vi vil bruke denne metoden til å sette inn / oppdatere mesteparten av postene.
# 5) Hent resultater
Når vi utfører spørsmålene ved hjelp av executeQuery () -metoden, blir resultatet lagret i ResultSet-objektet. Det returnerte ResultSet-objektet vil aldri være null, selv om det ikke er noen samsvarende post i tabellen. ResultSet-objekt brukes til å få tilgang til dataene hentet fra databasen.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Vi kan bruke metoden executeQuery () for SELECT-spørringen. Når noen prøver å utføre innsettings- / oppdateringsspørsmålet, vil det kaste SQLExecption med meldingen “ metoden executeQuery kan ikke brukes til oppdatering ”.
Et ResultatSet-objekt peker på gjeldende rad i resultatsettet. For å gjenta dataene i ResultSet-objektet, ring neste () -metoden på en stund-loop. Hvis det ikke er flere poster å lese, vil den returnere FALSE.
ResultSet kan også brukes til å oppdatere data i DB. Vi kan få data fra ResultSet ved hjelp av getter-metoder som getInt (), getString (), getDate (). Vi må sende kolonneindeksen eller kolonnenavnet som parameter for å få verdiene ved hjelp av Getter-metoder.
Vi får vite mer om ResultSet i neste opplæring.
# 6) Lukk tilkobling
Til slutt er vi ferdige med å manipulere data i DB. Nå kan vi lukke JDBC-forbindelsen. Vi må sørge for at vi har stengt ressursen etter at vi har brukt den. Hvis vi ikke lukker dem ordentlig, kan det hende at vi ikke kommer i forbindelse.
Når vi lukker tilkoblingsobjektet, vil Statement- og ResultSet-objekter lukkes automatisk.
conn.close();
Fra Java 7 og utover kan vi lukke JDBC-forbindelsene automatisk ved hjelp av en prøvefangstblokk. JDBC-tilkobling skal åpnes i parentes av prøveblokken. Inne i prøveblokken kan du gjøre databaseforbindelsene som vi gjør.
Når utførelsen går ut av prøveblokken, lukkes forbindelsen automatisk. I dette tilfellet trenger vi ikke å lukke forbindelsen ved å ringe metoden Conn.close i Java-programmet.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Eksempel på Java JDBC-tilkobling
I dette eksemplet vil du se hvordan du implementerer de 6 grunnleggende trinnene for å koble til en database ved hjelp av JDBC i Java-programmet.
Lag tabell
Før det oppretter du først en tabell og legger til noen oppføringer i den.
Nedenfor er SQL-spørringen for å lage en tabell.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Opprettet 'medarbeider_detaljer' -tabellen i Oracle DB.
Sett inn data i tabellen
Bruk følgende spørsmål, og sett inn dataene i tabellen “medarbeider_detaljer”.
insert into employee_details values (1001, 'Luther', 'Martin', 'ml@gmail.com', 1, 13000); insert into employee_details values (1002, 'Murray', 'Keith', 'km@gmail.com', 2, 25000); insert into employee_details values (1003, 'Branson', 'John', 'jb@gmail.com', 3, 15000); insert into employee_details values (1004, 'Martin', 'Richard', 'rm@gmail.com', 4, 16000); insert into employee_details values (1005, 'Hickman', 'David', 'dh@gmail.com', 5, 17000);
Java-program
Last ned JDBC jar-filen og importer den til Java-prosjektet.
package com.STH.JDBC; // import sql package to use it in our program import java.sql.*; public class Sample_JDBC_Program { public static void main(String() args) throws ClassNotFoundException, SQLException { // store the SQL statement in a string String QUERY = 'select * from employee_details'; //register the oracle driver with DriverManager Class.forName('oracle.jdbc.driver.OracleDriver'); //Here we have used Java 8 so opening the connection in try statement try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Created statement and execute it ResultSet rs1 = statemnt1.executeQuery(QUERY); { //Get the values of the record using while loop while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); //store the values which are retrieved using ResultSet and print it System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } } catch (SQLException e) { //If exception occurs catch it and exit the program e.printStackTrace(); } } }
Produksjon:
Viktige punkter å merke seg:
- Først må vi importere pakkene som vi skal bruke i Java-programmet vårt for JDBC-tilkoblingen. Så vi kan bruke klassene, underklassene og grensesnittene i pakkene.
- Vi må registrere eller laste driveren med DriverManager før vi oppretter en forbindelse.
- Etter at vi har registrert sjåføren, kan vi opprette forbindelsen og utføre operasjonene.
- Ved hjelp av et uttalelsesgrensesnitt kan vi opprette og utføre SQL-spørringen. For et enkelt SQL-spørsmål kan vi bruke Uttalelsesgrensesnittet. For å sette inn / oppdatere / slette kan vi bruke PreparedStatement-grensesnittet.
- Etter at uttalelsen er utført, blir resultatene lagret i ResultSet-objektet. Vi får resultatene fra ResultSet-objektet ved hjelp av neste () -metoden for mer enn 1 post.
- Når vi er ferdig med databasedriften, må vi lukke forbindelsen. Slik at ressursen vil være tilgjengelig for andre å bruke.
ofte stilte spørsmål
Q # 1) Hva er de grunnleggende trinnene for å koble til DB i Java?
Svar: Det er 6 grunnleggende trinn for å koble til DB i Java.
De er:
- Import-pakke
- Last sjåfør
- Opprett tilkobling
- Opprett og utfør uttalelsen
- Hent resultatene
- Lukk tilkobling
Q # 2) Hva er forskjellen mellom BLOB og CLOB datatyper i JDBC?
Svar:
fossemodell i livssyklus for programvareutvikling
BLOB brukes til å holde den binære typen data. Lagringsstørrelsen kan variere avhengig av databasene Eksempel: bilder, stemme, video.
CLOB brukes til å holde karaktertypen data. I likhet med CLOB kan lagringsplassen variere basert på DB. Eksempel: filer.
Q # 3) Hvilken metode i DriverManager-klassen brukes til å opprette en forbindelse med DB?
Svar: DriverManager-klassen har en getConnection () -metode som brukes til å opprette en forbindelse med DB.
Q # 4) Hva er forskjellen mellom Class.forName () og DriverManager.registerDriver ()?
Svar: Class.forName () - Først laster den driveren inn i minnet og registrerer deretter riktig driver hos Driver Manager. Deretter vil det opprette et objekt til driveren for å utføre JDBC-tilkoblingen. Det vil laste sjåføren eksplisitt.
DriverManager.registerDriver () - Det registrerer sjåføren implisitt.
Sp # 5) Hva er en tilkoblingslekkasje?
Svar: Denne situasjonen oppstår når en forbindelse åpnes og du ikke lukket den. Hvis det er en blokk med kode, som åpner tilkoblingen og ikke lukker tilkoblingen. Hver gang den kodeblokken utføres, vil en forbindelse lekke fra tilkoblingsbassenget.
Når alle tilgjengelige tilkoblinger er lekket, vil ingen tilkobling være tilgjengelig, og applikasjonen vil henge. Hvor mye det er viktig å åpne forbindelsen så mye er det viktig å lukke forbindelsen.
Sp # 6) Er det obligatorisk å lukke forbindelsen?
Svar: Hvis du bruker Java-versjoner under 7, må du lukke forbindelsen manuelt.
Fra versjoner over Java 7 kan vi lukke forbindelsen automatisk ved å åpne JDBC-tilkoblingskoden i parentes av prøveblokken. Når programmet går ut av prøveblokken, lukkes forbindelsen automatisk.
Konklusjon
I denne veiledningen har vi diskutert hvordan du oppretter en JDBC-forbindelse. Nå kan du utføre DB-operasjoner ved hjelp av JDBC i Java-programmet. Vi utforsket de 6 grunnleggende trinnene for å koble til databasen. Vi må importere pakkene i Java-programmet for å bruke det.
Når vi registrerer driveren, kan vi opprette forbindelsen. Vi kan opprette og utføre SQL-setningen ved å bruke et uttalelsesgrensesnitt og hente resultatene i ResultSet-objektet. Som det siste trinnet, bør vi lukke forbindelsen.
Anbefalt lesing
- Java JDBC Tutorial: Hva er JDBC (Java Database Connectivity)
- Java-grensesnitt og abstrakt klasseopplæring med eksempler
- Java JDBC-transaksjonsstyring med eksempel
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: Hvordan bruke Java ResultSet for å hente data
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- Introduksjon til Java Programming Language - Video Tutorial
- Selenium Database Testing (Bruk WebDriver og JDBC API)