java jdbc connection tutorial with programming example
Denne JDBC-forbindelsesvejledning forklarer grundlæggende trin til en database med eksempler og giver JDBC-forbindelsesstrenge til forskellige databaser:
gratis pop op-blokker til Google Chrome
I den foregående tutorial af JDBC tutorial-serie , lærte vi komponenter, arkitektur og drivertyper i Java Database Connectivity (JDBC).
I denne vejledning diskuterer vi trinene til at oprette forbindelse til databaser ved hjælp af JDBC. Denne vejledning viser dig, hvordan du laver JDBC-forbindelse og udfører databasehandlinger. JDBC API fungerer som en grænseflade mellem Java-programmet og databasen.
I slutningen af denne tutorial vil du være i stand til at skrive Java-programmer for at oprette forbindelse til databaser og udføre DB-operationer.
Hvad du vil lære:
JDBC-forbindelsestrin
Der er 6 grundlæggende trin til at oprette forbindelse til JDBC. De er anført i nedenstående billede:
# 1) Importer pakker
Først skal vi importere de eksisterende pakker for at bruge det i vores Java-program. Import sørger for, at JDBC API-klasser er tilgængelige for programmet. Vi kan derefter bruge klasser og underklasser af pakkerne.
Uanset JDBC-driveren skal du tilføje følgende importerklæring i Java-programmet.
import java.sql.*;
Importer de andre klasser baseret på den funktionalitet, som du vil bruge i programmet. Download de relevante Jar-filer til den database, som du vil bruge i programmet.
Henvis til forrige tutorial for links til download af Jar-filer til din database.
JDBC API 4.0 leverer hovedsageligt 2 vigtige pakker:
- java.sql
- javax.sql
(i) java.sql-pakke
Denne pakke giver klasser og grænseflader til at udføre de fleste af JDBC-funktionerne som at oprette og udføre SQL-forespørgsler.
Klasser / grænseflader | Beskrivelse |
---|---|
DriverManager | Det giver grundlæggende service til styring af et sæt JDBC-drivere |
BLOB | Det repræsenterer SQL Blob-værdi i Java-program |
CallableStatement | Det bruges til at udføre SQL-lagrede procedurer |
CLOB | Det repræsenterer SQL Clob-værdi i Java-program |
Forbindelse | Det opretter en forbindelse (session) med en bestemt database |
Dato | Det giver support til Date SQL-typen |
Chauffør | Det opretter en forekomst af en driver med Driver Manager |
ParameterMetaData | Det er et objekt, der kan bruges til at få oplysninger om typerne og egenskaberne for hver parameter i et PreparedStatement-objekt |
PreparedStatement | Det bruges til at oprette og udføre en parametreret forespørgsel i Java-programmet |
ResultSet | Det bruges til at få adgang til resultatet række for række |
ResultSetMetaData | Det bruges til at få oplysninger om kolonnernes typer og egenskaber i et ResultSet-objekt |
RowId | Det repræsenterer SQL ROWID-værdien |
Savepoint | Det repræsenterer sparepunkt i transaktionen |
SQLData | Det bruges til at kortlægge SQL User Defined Type (UDT) til en klasse i Java-program |
SQLXML | Det repræsenterer SQL XML-typen |
Udmelding | Det bruges til at udføre en statisk SQL-sætning |
DriverPropertyInfo | Det giver driveregenskaber til at oprette forbindelse |
SQLException | Det giver oplysninger om databasefejl |
SQLTimeoutException | Det er en underklasse af SQLException, der kastes, når den timeout, der er angivet i erklæringen, er udløbet |
SQLadvarsel | Det er en undtagelse, der giver information om advarsler om databaseadgang |
Struktur | Det er en standard kortlægning i Java-program til SQL-struktureret type |
(ii) javax.sql-pakke
Det er en JDBC-udvidelses-API og giver serveradgang til dataadgang og behandling i Java-programmet.
Klasser / grænseflader | Beskrivelse |
---|---|
ConnectionEvent | Det giver oplysninger om forekomsten af forbindelsesrelaterede begivenheder |
CommonDataSource | Det er en grænseflade, der definerer de metoder, der er almindelige mellem DataSource, XADataSource og ConnectionPoolDataSource |
ConnectionPoolDataSource | Det er en fabrik til PooledConnection-objekter |
Datakilde | Det er en fabrik til forbindelser til den fysiske DataSource, som objektet repræsenterer |
PooledConnection | Det bruges til at styre Connection Pool |
Rækkesæt | Det giver support til JDBC API til komponentmodel til Java-bønner |
RowSetMetadata | Det har oplysningerne om kolonnerne i et RowSet-objekt |
ConnectionEventListener | Det bruges til at registrere PooledConnection-objekthændelser |
RowSetEvent | Det genereres, når en begivenhed opstår for et Rowset-objekt |
ErklæringEvent | Det sendes til alle StatementEventListeners, der blev registreret med en genereret PooledConnection |
# 2) Indlæs driver
Først skal vi indlæse / registrere driveren i programmet, før vi opretter forbindelse til databasen. Du skal kun registrere det en gang pr. Database i programmet.
Vi kan indlæse driveren på følgende to måder:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Klasse for navn ()
På denne måde indlæses førerens klassefil i hukommelsen ved kørsel. Det indlæser implicit føreren. Under indlæsning registreres driveren automatisk med JDBC.
DB-navn | JDBC Driver-navn |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Oracle | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MS-adgang | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
Bemærk: metoden forName () er kun gyldig for JDK-kompatible virtuelle maskiner.
(ii) DriverManager.registerDriver ()
DriverManager er en indbygget klasse, der er tilgængelig i pakken java.sql. Det fungerer som en formidler mellem Java-applikation og database, som du vil oprette forbindelse til. Inden du opretter forbindelse til databasen, skal du registrere driveren hos DriverManager. DriverManagers hovedfunktion er at indlæse driverklassen i databasen og oprette en forbindelse med DB.
Offentligt statisk ugyldigt register Driver (driver) - Denne metode registrerer driveren hos Driver Manager. Hvis chaufføren allerede er registreret, tager den ingen handling.
- Det vil smide SQLException hvis databasefejl opstår.
- Det vil smide NullPointerException hvis føreren er nul.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
På denne måde kan du registrere driveren til din database ved at sende den som en parameter.
# 3) Opret forbindelse
Efter indlæsning af driveren er det næste trin at oprette og oprette forbindelsen. Når det er nødvendigt, importeres pakker, og drivere indlæses og registreres, så kan vi gå til at oprette en databaseforbindelse.
DriverManager-klassen har getConnection-metoden, vi bruger denne metode til at få forbindelse til databasen. For at kalde getConnection () -metoden skal vi videregive 3 parametre. De 3 parametre er streng datatype URL, et brugernavn og en adgangskode for at få adgang til databasen.
Metoden getConnection () er en overbelastet metode. De to metoder er:
- getConnection (URL, brugernavn, adgangskode); - Den har 3 parametre URL, brugernavn, adgangskode.
- getConnection (URL); - Den har kun en parameter. URL har også et brugernavn og en adgangskode.
Følgende tabel viser JDBC-forbindelsesstrengene for de forskellige databaser:
Database | Forbindelsesstreng / DB URL |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Oracle | jdbc: oracle: thin: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; DatabaseName = |
MS-adgang | 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 eksempel
- tynd henviser til drivertypen.
- lokal vært er hvor Oracle-databasen kører.
- 1521 er det portnummer, der skal oprettes forbindelse til DB.
- køretøj - SID
- System - Brugernavn til at oprette forbindelse til Oracle Database.
- Pass123 @ - Adgangskode
# 4) Opret og udfør erklæring
Når forbindelsen er oprettet, kan vi interagere med den tilsluttede database. Først skal vi oprette erklæringen for at udføre SQL-forespørgslen og derefter udføre udsagnet.
(i) Opret erklæring
Nu opretter vi udsagnsobjektet, der kører forespørgslen med den tilsluttede database. Vi bruger createStatement-metoden til Forbindelse klasse for at oprette forespørgslen.
Der er 3 sætningsgrænseflader er tilgængelige i java.sql-pakken. Disse forklares nedenfor:
en erklæring
Denne grænseflade bruges til at implementere enkle SQL-sætninger uden parameter. Det returnerer ResultSet-objektet.
Statement statemnt1 = conn.createStatement();
b) PreparedStatement
Denne PreparedStatement-grænseflade udvider Statement-grænsefladen. Så det har flere funktioner end erklæringsgrænsefladen. Det bruges til at implementere parametriserede og prækompilerede SQL-sætninger. Applikationens ydeevne øges, fordi den kun kompilerer forespørgslen en gang.
Det er let at genbruge denne grænseflade med en ny parameter. Det understøtter IN-parameteren. Selv vi kan bruge denne erklæring uden nogen parameter.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
CallableStatement-grænsefladen udvider den PreparedStatement-grænseflade. Så det har flere funktioner end PreparedStatement-grænsefladen. Det bruges til at implementere en parametreret SQL-sætning, der påberåber procedure eller funktion i databasen. En lagret procedure fungerer som en metode eller funktion i en klasse. Det understøtter parametrene IN og OUT.
CallableStatement-forekomsten oprettes ved at ringe til PreparCall-metoden for Connection-objektet.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Udfør forespørgslen
Der er 4 vigtige metoder til at udføre forespørgslen i Statement-grænsefladen. Disse forklares nedenfor:
- ResultSet executeQuery (streng SQL)
- int executeUpdate (String sql)
- boolsk udførelse (streng sql)
- int () executeBatch ()
a) ResultSet executeQuery (streng SQL)
Metoden executeQuery () i interface-erklæring bruges til at udføre SQL-forespørgslen og hente værdierne fra DB. Det returnerer ResultSet-objektet. Normalt bruger vi denne metode til SELECT-forespørgslen.
b) executeUpdate (streng sql)
Metoden executeUpdate () bruges til at udføre værdispecificerede forespørgsler som INSERT, UPDATE, DELETE (DML-sætninger) eller DDL-sætninger, der ikke returnerer noget. For det meste bruger vi denne metode til indsættelse og opdatering.
c) udfør (streng SQL)
Metoden execute () bruges til at udføre SQL-forespørgslen. Det vender tilbage sand hvis den udfører SELECT-forespørgslen. Og det vender tilbage falsk hvis det udfører INSERT- eller UPDATE-forespørgsel.
d) executeBatch ()
Denne metode bruges til at udføre en batch af SQL-forespørgsler til databasen, og hvis alle forespørgsler bliver udført med succes, returnerer den en række opdateringstællinger. Vi bruger denne metode til at indsætte / opdatere størstedelen af poster.
# 5) Hent resultater
Når vi udfører forespørgslerne ved hjælp af metoden executeQuery (), gemmes resultatet i ResultSet-objektet. Det returnerede ResultSet-objekt vil aldrig være nul, selvom der ikke er nogen matchende post i tabellen. ResultSet-objekt bruges til at få adgang til de data, der hentes fra databasen.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Vi kan bruge metoden executeQuery () til SELECT-forespørgslen. Når nogen forsøger at udføre forespørgslen om indsættelse / opdatering, kaster den SQLExecption med beskeden “ metoden executeQuery kan ikke bruges til opdatering ”.
Et ResultatSet-objekt peger på den aktuelle række i resultatsættet. For at gentage dataene i ResultSet-objektet skal du kalde den næste () -metode på et stykke tid. Hvis der ikke er flere poster at læse, returnerer den FALSE.
ResultSet kan også bruges til at opdatere data i DB. Vi kan hente dataene fra ResultSet ved hjælp af gettermetoder som getInt (), getString (), getDate (). Vi er nødt til at videregive kolonneindekset eller kolonnenavnet som parameter for at få værdierne ved hjælp af Getter-metoder.
Vi får mere at vide om ResultSet i den næste vejledning.
# 6) Luk forbindelse
Endelig er vi færdige med at manipulere data i DB. Nu kan vi lukke JDBC-forbindelsen. Vi er nødt til at sikre, at vi har lukket ressourcen, efter at vi har brugt den. Hvis vi ikke lukker dem ordentligt, ender vi muligvis uden forbindelser.
Når vi lukker forbindelsesobjektet, lukkes Statement- og ResultSet-objekter automatisk.
conn.close();
Fra og med Java 7 kan vi lukke JDBC-forbindelserne automatisk ved hjælp af en prøvefangstblok. JDBC-forbindelsen skal åbnes i parentesen af prøveblokken. Inde i prøveblokken kan du udføre databaseforbindelserne normalt, som vi gør.
Når udførelsen afslutter prøveblokken, lukker den automatisk forbindelsen. I dette tilfælde behøver vi ikke lukke forbindelsen ved at ringe til metoden conn.close i Java-programmet.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Eksempel på Java JDBC-forbindelse
I dette eksempel vil du se, hvordan du implementerer de 6 grundlæggende trin til at oprette forbindelse til en database ved hjælp af JDBC i Java-programmet.
Opret tabel
Før det skal du først oprette en tabel og tilføje nogle poster i den.
Nedenfor er SQL-forespørgslen for at oprette en tabel.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Oprettet tabellen 'medarbejder_detaljer' i Oracle DB.
Indsæt data i tabel
Brug følgende forespørgsler til at indsætte dataene i tabellen 'medarbejder_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
Download JDBC jar-filen og importer den til Java-projektet.
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(); } } }
Produktion:
Nøglepunkter, der skal bemærkes:
- Først skal vi importere de pakker, som vi bruger i vores Java-program til JDBC-forbindelsen. Så vi kan bruge klasser, underklasser og grænseflader i pakkerne.
- Vi skal registrere eller indlæse driveren med DriverManager, før vi opretter en forbindelse.
- Efter registrering af driveren kan vi oprette forbindelsen og udføre handlingerne.
- Ved hjælp af en sætningsgrænseflade kan vi oprette og udføre SQL-forespørgslen. For en simpel SQL-forespørgsel kan vi bruge erklæringsgrænsefladen. Til indsættelse / opdatering / sletning kan vi bruge grænsefladen PreparedStatement.
- Efter udførelsen af erklæringen gemmes resultaterne i ResultSet-objektet. Vi får resultaterne fra ResultSet-objektet ved hjælp af den næste () metode til mere end 1 post.
- Når vi er færdige med databasefunktionen, skal vi lukke forbindelsen. Så ressourcen vil være tilgængelig for andre at bruge.
Ofte stillede spørgsmål
Q # 1) Hvad er de grundlæggende trin for at oprette forbindelse til DB i Java?
Svar: Der er 6 grundlæggende trin til at oprette forbindelse til DB i Java.
De er:
- Import-pakke
- Belastning driver
- Opret forbindelse
- Opret og udfør erklæringen
- Hent resultater
- Luk forbindelse
Q # 2) Hvad er forskellen mellem BLOB- og CLOB-datatyper i JDBC?
Svar:
BLOB bruges til at indeholde den binære datatype. Lagringsstørrelsen kan variere afhængigt af databaser Eksempel: billeder, stemme, video.
CLOB bruges til at indeholde karaktertypen af data. Ligesom CLOB kan lagerpladsen variere afhængigt af DB. Eksempel: filer.
Spørgsmål nr. 3) Hvilken metode i DriverManager-klassen bruges til at oprette forbindelse til DB?
Svar: DriverManager-klassen har en getConnection () -metode, der bruges til at oprette forbindelse til DB.
Spørgsmål nr. 4) Hvad er forskellen mellem Class.forName () og DriverManager.registerDriver ()?
Svar: Class.forName () - Først indlæser den driveren i hukommelsen og registrerer derefter den relevante driver hos Driver Manager. Derefter opretter det et objekt fra driveren til at udføre JDBC-forbindelsen. Det indlæser chaufføren eksplicit.
DriverManager.registerDriver () - Det registrerer chaufføren implicit.
Spørgsmål nr. 5) Hvad er en forbindelseslækage?
Svar: Denne situation opstår, når en forbindelse åbnes, og du ikke lukkede den. Hvis der er en blok kode, der åbner forbindelsen og ikke lukker forbindelsen. Hver gang denne kodeblok udføres, lækker en forbindelse fra Connection Pool.
Når alle de tilgængelige forbindelser er lækket, vil der ikke være nogen forbindelse, og applikationen hænger. Hvor meget det er vigtigt at åbne forbindelsen så meget er det vigtigt at lukke forbindelsen.
Q # 6) Er det obligatorisk at lukke forbindelsen?
Svar: Hvis du bruger Java-versioner under 7, skal du lukke forbindelsen manuelt.
Fra versioner over Java 7 kan vi lukke forbindelsen automatisk ved at åbne JDBC-forbindelseskoden i parentesen til prøveblokken. Når programmet går ud af prøveblokken, lukkes forbindelsen automatisk.
Konklusion
I denne vejledning har vi diskuteret, hvordan man opretter en JDBC-forbindelse. Nu kan du udføre DB-operationer ved hjælp af JDBC i Java-programmet. Vi undersøgte de 6 grundlæggende trin for at oprette forbindelse til databasen. Vi skal importere pakkerne i vores Java-program for at bruge det.
Niveau 1 helpdesk interview spørgsmål
Når vi har registreret driveren, kan vi oprette forbindelsen. Vi kan oprette og udføre SQL-sætningen ved hjælp af en erklæringsgrænseflade og hente resultaterne i ResultSet-objektet. Som det sidste trin skal vi lukke forbindelsen.
Anbefalet læsning
- Java JDBC Tutorial: Hvad er JDBC (Java Database Connectivity)
- Java-interface og abstrakt klasseundervisning med eksempler
- Java JDBC-transaktionsstyring med eksempel
- JDBC DriverManager, JDBC forberedt Erklæring og erklæring
- JDBC ResultSet: Sådan bruges Java ResultSet til at hente data
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger
- Introduktion til Java-programmeringssprog - Video-tutorial
- Selenium Database Testing (Brug af WebDriver og JDBC API)