JDBC Tutorial – JDBC-arkitektur, komponenter og arbejde
I denne JDBC-tutorial lærer vi om udførelse af databaseoperationer i Java ved hjælp af JDBC API (SQL CREATE, INSERT, UPDATE, DELETE og SELECT).
Vi vil se på processen med at forbinde Java med databasen ved hjælp af JDBC. Vi vil implementere hvert eksempel på udførelse af operationer på databasen.
I denne JDBC-tutorial vil vi også diskutere sammensætningen og arkitekturen af JDBC i Java. Vi vil også se alle de klasser og grænseflader, der bruges i JDBC API. Så lad os starte JDBC tutorial.
Hold dig opdateret med de nyeste teknologitrends, Deltag i TechVidvan på Telegram
Hvad er JDBC?
Udtrykket JDBC står for Java Database Connectivity. JDBC er en specifikation fra Sun microsystems. JDBC er en API (Application Programming Interface) i Java, der hjælper brugere med at interagere eller kommunikere med forskellige databaser.
Klasserne og grænsefladerne i JDBC API tillader applikationen at sende anmodningen til den specificerede database.
Ved hjælp af JDBC kan vi skrive programmer, der kræves for at få adgang til databaser. JDBC og databasedriveren er i stand til at få adgang til databaser og regneark. JDBC API er også nyttig til at få adgang til virksomhedsdata, der er gemt i en relationel database (RDB).
Formål med JDBC
Der er nogle virksomhedsapplikationer oprettet ved hjælp af JAVA EE(Enterprise Edition) teknologien. Disse applikationer skal interagere med databaser for at gemme applikationsspecifik information.
Interaktion med databasen kræver effektiv databaseforbindelse, hvilket vi kan opnå ved at bruge ODBC (Open database connectivity) driver. Vi kan bruge denne ODBC-driver med JDBC til at interagere eller kommunikere med forskellige slags databaser, såsom Oracle, MS Access, Mysql og SQL osv.
Applikationer af JDBC
JDBC er grundlæggende en specifikation, der giver et komplet sæt grænseflader. Disse grænseflader giver mulighed for bærbar adgang til en underliggende database.
Vi kan bruge Java til at skrive forskellige typer eksekverbare filer, såsom:
- Java-applikationer
- Java-applets
- Enterprise JavaBeans (EJB'er)
- Java Servlets
- Java ServerPages (JSP'er)
Alle disse forskellige eksekverbare filer kan bruge en JDBC-driver til at få adgang til en database og drage fordel af de lagrede data. JDBC giver lignende funktioner som ODBC ved at tillade Java-programmer at indeholde databaseuafhængig kode.
JDBC 4.0-pakkerne
Der er to primære pakker til JDBC 4.0:java.sql og javax.sql. JDBC 4.0 er den seneste JDBC-version på tidspunktet for skrivning af denne artikel. Disse pakker tilbyder hovedklasserne til interaktion med datakilder.
De nye funktioner i disse pakker inkluderer ændringer på følgende områder:
- Automatisk indlæsning af databasedriver.
- Forbedringer i håndtering af undtagelser.
- Understøttelse af nationalt tegnsæt.
- SQL ROWID-adgang.
- Forbedret BLOB/CLOB-funktionalitet.
- Forbedringer af forbindelse og erklæringsgrænseflade.
- SQL 2003 XML-datatypeunderstøttelse.
- Annoteringer.
Komponenter af JDBC
Lad os gå videre i JDBC Tutorial og lære JDBC-komponenterne. Der er hovedsageligt fire hovedkomponenter i JDBC. Disse komponenter hjælper os med at interagere med en database. Komponenterne i JDBC er som følger:
1. JDBC API: JDBC API giver forskellige klasser, metoder og grænseflader, der er nyttige i nem kommunikation med databasen. Det giver også to pakker, der indeholder Java SE (Standard Edition) og Java EE (Enterprise Edition) platforme for at udvise WORA-funktionerne (write once run everywhere).
Der er også en standard i JDBC API til at forbinde en database med en klientapplikation.
2. JDBC Driver Manager: Driver Manager for JDBC indlæser databasespecifikke drivere i en applikation. Denne drivermanager etablerer en forbindelse med en database. Den foretager også et databasespecifikt kald til databasen, så den kan behandle brugeranmodningen.
3. JDBC-testpakke: JDBC-testpakken hjælper med at teste den operation, såsom indsættelse, sletning, opdatering, som JDBC-driverne udfører.
4. JDBC-ODBC Bridge-drivere: JDBC-ODBC Bridge Driver forbinder databasedriverne til databasen. Denne brodriver oversætter JDBC-metodekaldet til ODBC-metodekaldet. Den bruger en pakke, hvori der er et indbygget bibliotek til at få adgang til ODBC-karakteristika.
JDBC's arkitektur
Følgende figur viser JDBC-arkitekturen:
Beskrivelse af arkitekturen:
1. Ansøgning: Applikation i JDBC er en Java-applet eller en Servlet, der kommunikerer med en datakilde.
2. JDBC API: JDBC API leverer klasser, metoder og grænseflader, der tillader Java-programmer at udføre SQL-sætninger og hente resultater fra databasen. Nogle vigtige klasser og grænseflader defineret i JDBC API er som følger:
- DriverManager
- Driver
- Forbindelse
- Erklæring
- Forberedt erklæring
- CallableStatement
- Resultatsæt
- SQL-data
3. Driver Manager: Driver Manager spiller en vigtig rolle i JDBC-arkitekturen. Drivermanageren bruger nogle databasespecifikke drivere, der effektivt forbinder virksomhedsapplikationer med databaser.
4. JDBC-drivere: JDBC-drivere hjælper os med at kommunikere med en datakilde gennem JDBC. Vi har brug for en JDBC-driver, der intelligent kan interagere med den respektive datakilde.
Typer af JDBC-arkitektur
Der er to typer behandlingsmodeller i JDBC-arkitektur:to-lags og tre-tier. Disse modeller hjælper os med at få adgang til en database. De er:
1. To-lags model
I denne model kommunikerer en Java-applikation direkte med datakilden. JDBC driver giver kommunikation mellem applikationen og datakilden. Når en bruger sender en forespørgsel til datakilden, gives svarene på disse forespørgsler til brugeren i form af resultater.
Vi kan lokalisere datakilden på en anden maskine på et netværk, som en bruger er tilsluttet. Dette kaldes en klient/server-konfiguration, hvor brugermaskinen fungerer som en klient, og maskinen med datakilden fungerer som en server.
2. Tre-lags model
I trelagsmodellen går forespørgslen på brugerforespørgslerne til mellemlagstjenesterne. Fra mellemtrinstjenesten når kommandoerne igen datakilden. Resultaterne af forespørgslen går tilbage til det midterste niveau.
Derfra går det endelig til brugeren. Denne type model er gavnlig for ledelsesinformationssystemdirektører.
Forudsætninger for JDBC
- JDK(Java Development Kit)
- Oracle-database:Download den fra http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
- JDBC-driver til Oracle Database:Download den fra http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html . Tilføj ojdbc6.jar til projektbiblioteket.
Trin til at forbinde Java-program og database:
1. Indlæser driveren
Vi skal først indlæse driveren eller registrere den, før vi bruger den i programmet. Der skal være tilmelding én gang i dit program. Vi kan registrere en chauffør på en af de to måder:
a. Class.forName(): I dette indlæser vi driverens klassefil i hukommelsen under kørsel. Det er ikke nødvendigt at bruge en ny operator til at oprette et objekt. Det følgende viser brugen af Class.forName() til at indlæse Oracle-driveren:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
b. DriverManager.registerDriver(): DriverManager er en indbygget Java-klasse, der kommer med et statisk medlemsregister. Vi kalder førerklassens konstruktør på kompileringstidspunktet. Følgende eksempel viser brugen af DriverManager.registerDriver() til at registrere Oracle-driveren:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())
2. Opret forbindelserne
Efter indlæsning af driveren skal vi oprette forbindelser ved hjælp af følgende kode:
Connection con = DriverManager.getConnection(url, user, password)
- bruger:brugernavn, hvorfra sql kommandoprompt kan tilgås.
- adgangskode:adgangskode, hvorfra sql kommandoprompt kan tilgås.
- con:reference til forbindelsesgrænseflade.
- url :Uniform Resource Locator. Vi kan oprette det som følger:
- String url =“ jdbc:oracle:thin:@localhost:1521:xe”
Hvor oracle er databasen, er tynd driveren, @localhost er IP-adressen, hvor databasen er gemt, 1521 er portnummeret, og xe er tjenesteudbyderen. Alle tre parametre er af String-type, og programmøren bør erklære dem, før funktionen kaldes.
3. Opret en erklæring
Når du har etableret en forbindelse, kan du interagere med databasen. JDBCStatement-, CallableStatement- og PreparedStatement-grænsefladerne definerer de metoder, der tillader os at sende SQL-kommandoer og modtage data fra databasen.
Brug af JDBC-erklæring er som følger:
Statement statement = con.createStatement()
Her er con en reference til forbindelsesgrænsefladen, som vi brugte i det foregående trin.
4. Udfør forespørgslen
Den mest afgørende del er at udføre forespørgslen. Her er Query en SQL-forespørgsel. Nu, som vi ved, kan vi have flere typer forespørgsler. Nogle af dem er som følger:
- Forespørgslen til opdatering eller indsættelse af tabeller i en database.
- Forespørgslen til at hente data fra databasen.
executeQuery()-metoden i Statement-grænsefladen udfører forespørgsler om at hente værdier fra databasen. executeQuery()-metoden returnerer objektet i ResultSet, som vi kan bruge til at hente alle poster i en tabel.
5. Luk forbindelserne
Indtil nu har vi sendt dataene til det angivne sted. Nu er vi ved at fuldføre vores opgave. Vi skal lukke forbindelsen. Ved at lukke forbindelsen lukkes objekter af Statement og ResultSet interface automatisk. Close()-metoden i forbindelsesgrænsefladen lukker forbindelsen.
Eksempel:
con.close();
Implementering
package com.techvidvan.jdbctutorial; import java.sql. * ; import java.util. * ; class JDBCTutorial { public static void main(String a[]) { //Creating the connection String url = "jdbc:oracle:thin:@localhost:1521:xe"; String user = "system"; String pass = "12345"; //Entering the data Scanner sc = new Scanner(System. in ); System.out.println("Enter name:"); String name = sc.next(); System.out.println("Enter Roll number:"); int rollNumber = sc.nextInt(); System.out.println("Enter class:"); String cls = sc.next(); //Inserting data using SQL query String sql = "insert into student values('" + name + "'," + rollNumber + ",'" + cls + "')"; Connection con = null; try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); //Reference to connection interface con = DriverManager.getConnection(url, user, pass); Statement st = con.createStatement(); int result = st.executeUpdate(sql); if (result == 1) System.out.println("Inserted successfully: " + sql); else System.out.println("Insertion failed"); con.close(); } catch(Exception e) { System.err.println(e); } } }
Output:
Indtast navn:Shreya
Indtast rullenummer:
123
Indtast klasse:
8C
Indsat korrekt:indsæt i elevværdier('Shreya', ' 123', '8C')
JDBC fungerer
Lad os nu, når vi går videre i denne JDBC-tutorial, lære at arbejde med JDBC. En Java-applikation, der kommunikerer med databasen, kræver programmering ved hjælp af JDBC API.
Vi er nødt til at tilføje understøttende datakilder til JDBC Driver såsom Oracle og SQL-server i Java-applikation til JDBC-understøttelse. Vi kan gøre dette dynamisk på køretid. Denne JDBC-driver interagerer intelligent med den respektive datakilde.
Oprettelse af en simpel JDBC-applikation
package com.techvidvan.jdbctutorial; import java.sql. * ; public class JDBCTutorial { public static void main(String args[]) throws ClassNotFoundException, SQLException, { String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:XE"; String username = "John"; String password = "john12"; String query1 = "insert into students values(101, 'Pooja')"; //Load the driver class Class.forName(driverName); //Obtaining a connection Connection con = DriverManager.getConnection(url, username, password); //Obtaining a statement Statement stmt = con.createStatement(); //Executing the query int count = stmt.executeUpdate(query1); System.out.println("The number of rows affected by this query= " + count); //Closing the connection con.close(); } }
Ovenstående eksempel viser de grundlæggende trin for at få adgang til en database ved hjælp af JDBC. Vi brugte JDBC-ODBC-brodriveren til at oprette forbindelse til databasen. Vi er nødt til at importere java.sql-pakken, der giver grundlæggende SQL-funktionalitet.
Principielle JDBC-grænseflader og klasser
Lad os tage et overblik over de vigtigste grænseflader og klasser af JDBC. De er alle til stede i java.sql-pakken.
1. Class.forName()
Denne metode indlæser driverens klassefil i hukommelsen ved kørsel. Der er ingen grund til at bruge nye eller oprettelse af objekter.
Class.forName("oracle.jdbc.driver.OracleDriver");
2. DriverManager
DriverManager-klassen registrerer drivere til en bestemt databasetype. For eksempel Oracle Database i denne tutorial. Denne klasse etablerer også en databaseforbindelse med serveren ved hjælp af dens getConnection() metode.
3. Forbindelse
Forbindelsesgrænsefladen repræsenterer en etableret databaseforbindelse. Ved at bruge denne forbindelse kan vi oprette sætninger til at udføre forespørgsler og hente resultater. Vi kan også få metadata om databasen, lukke forbindelsen osv.
Connection con = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pwd1");
4. Erklæring og Forberedt erklæring
Statement- og PreparedStatement-grænsefladerne udfører en statisk SQL-forespørgsel og parameteriserede SQL-forespørgsler. Statement-grænsefladen er supergrænsefladen til PreparedStatement-grænsefladen. De almindeligt anvendte metoder til disse grænseflader er:
a. boolesk execute(String sql): Denne metode udfører en generel SQL-sætning. Den returnerer sand, hvis forespørgslen returnerer et ResultSet og falsk, hvis forespørgslen ikke returnerer noget. Vi kan kun bruge denne metode med en erklæring.
b. int executeUpdate(String sql): Denne metode udfører en INSERT-, UPDATE- eller DELETE-sætning. Det returnerer derefter en opdateret konto, der viser antallet af berørte rækker. For eksempel, 1 række indsat, eller 2 rækker opdateret, eller 0 rækker påvirket osv.
c. ResultSet executeQuery(String sql): Denne metode udfører en SELECT-sætning og returnerer et objekt af ResultSet. Dette returnerede objekt indeholder resultater returneret af forespørgslen.
5. Resultatsæt
ResultSet er en grænseflade, der indeholder tabeldata returneret af en SELECT-forespørgsel. Vi bruger objektet i ResultSet til at iterere over rækker ved hjælp af metoden next().
6. SQLException
SQLException-klassen er en kontrolleret undtagelse. Vi erklærer det til, så alle ovenstående metoder kan kaste denne undtagelse. Vi er nødt til at tilvejebringe en mekanisme til eksplicit at fange denne undtagelse, når vi kalder metoderne for ovenstående klasser.
Implementering af Insert Statement i JDBC
package com.techvidvan.jdbctutorial; import java.sql. * ; public class InsertStatementDemo { public static void main(String args[]) { String id = "id1"; String password = "pswd1"; String fullname = "TechVidvan"; String email = "techvidvan.com"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(" jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pswd1"); Statement stmt = con.createStatement(); // Inserting data in database String s1 = "insert into userid values('" + id + "', '" + password + "', '" + fullname + "', '" + email + "')"; int result = stmt.executeUpdate(s1); if (result > 0) System.out.println("Successfully Registered"); else System.out.println("Insertion Failed"); con.close(); } catch(Exception e) { System.out.println(e); } } }
Output:
Registreret med succesImplementering af opdateringserklæring i JDBC
package com.techvidvan.jdbctutorial; import java.sql. * ; public class UpdateStatementDemo { public static void main(String args[]) { String id = "id1"; String password = "pswd1"; String newPassword = "newpswd"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(" jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pswd1"); Statement stmt = con.createStatement(); // Updating database String s1 = "UPDATE userid set password = '" + newPassword + "' WHERE id = '" + id + "' AND password = '" + password + "'"; int result = stmt.executeUpdate(s1); if (result > 0) System.out.println("Password Updated Successfully "); else System.out.println("Error Occured!!Could not update"); con.close(); } catch(Exception e) { System.out.println(e); } } }
Output:
Adgangskode blev opdateretImplementering af Slet-erklæring i JDBC
package com.techvidvan.jdbctutorial; import java.sql. * ; public class DeleteStatementDemo { public static void main(String args[]) { String id = "id2"; String password = "pswd"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(" jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pswd1"); Statement stmt = con.createStatement(); //Deleting from database String s1 = "DELETE from userid WHERE id = '" + id + "' AND password = '" + pswd + "'"; int result = stmt.executeUpdate(s1); if (result > 0) System.out.println("One User Successfully Deleted"); else System.out.println("Error Occured!!Could not delete"); con.close(); } catch(Exception e) { System.out.println(e); } } }
Output:
Én bruger blev slettetImplementering af Select Statement i JDBC
package com.techvidvan.jdbctutorial; import java.sql. * ; public class SelectStatementDemo { public static void main(String args[]) { String id = "id1"; String password = "pwd1"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(" jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pwd1"); Statement stmt = con.createStatement(); //SELECT query String s1 = "select * from userid WHERE id = '" + id + "' AND pwd = '" + pwd + "'"; ResultSet rs = stmt.executeQuery(s1); if (rs.next()) { System.out.println("User-id: " + rs.getString(1)); System.out.println("Full Name: " + rs.getString(3)); System.out.println("E-mail: " + rs.getString(4)); } else { System.out.println("This id is already registered"); } con.close(); } catch(Exception e) { System.out.println(e); } } }
Output:
Bruger-id:id1Fulde navn:TechVidvan
E-mail:techvidvan.com
Konklusion
I denne JDBC-tutorial lærte vi, hvordan man udfører de forskellige databaseoperationer i Java. Vi diskuterede også forskellige programmer og trin til at oprette forbindelse til en database.
Så lærte vi at udføre INSERT-sætningen, SELECT-sætningen, UPDATE-sætningen OG DELETE-sætningen med et eksempelprogram. Vi dækkede arkitekturen og komponenterne i JDBC.
Vi håber, at denne artikel helt sikkert vil hjælpe dig med at udføre databaseoperationer i Java.