Java >> Java tutorial >  >> Tag >> Jdbc

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 succes

Implementering 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 opdateret

Implementering 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 slettet

Implementering 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:id1
Fulde 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.


Java tag