JDBC - Kurzanleitung

Was ist JDBC?

JDBC steht für Java Dan einerbase Connectivity ist eine Standard-Java-API für die datenbankunabhängige Konnektivität zwischen der Programmiersprache Java und einer Vielzahl von Datenbanken.

Die JDBC-Bibliothek enthält APIs für jede der Aufgaben, die üblicherweise mit der Datenbanknutzung verbunden sind:

  • Herstellen einer Verbindung zu einer Datenbank

  • Erstellen von SQL- oder MySQL-Anweisungen

  • Ausführen dieser SQL- oder MySQL-Abfragen in der Datenbank

  • Anzeigen und Ändern der resultierenden Datensätze

Voraussetzung:

Sie müssen die folgenden beiden Themen gut verstehen, um JDBC zu lernen:

  • JAVA-Kernprogrammierung

  • SQL- oder MySQL-Datenbank

JDBC - Umgebungs-Setup:

Stellen Sie sicher, dass Sie folgende Einstellungen vorgenommen haben:

  • Core JAVA-Installation

  • Installation der SQL- oder MySQL-Datenbank

Abgesehen davon müssen Sie eine Datenbank einrichten, die Sie für Ihr Projekt verwenden würden. Angenommen, dies ist EMP, und Sie haben in der Tabelle Mitarbeiter in derselben Datenbank erstellt.

JDBC-Anwendung erstellen:

Das Erstellen einer JDBC-Anwendung umfasst sechs Schritte, die ich in diesem Lernprogramm erläutern werde:

Importieren Sie die Pakete:

Dies erfordert, dass Sie die Pakete einschließen, die die für die Datenbankprogrammierung erforderlichen JDBC-Klassen enthalten. Am häufigsten reicht die Verwendung von import java.sql. * Wie folgt aus:

//STEP 1. Import required packages
import java.sql.*;

Registrieren Sie den JDBC-Treiber:

Dazu müssen Sie einen Treiber initialisieren, damit Sie einen Kommunikationskanal mit der Datenbank öffnen können. Es folgt das Code-Snippet, um dies zu erreichen:

//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

Öffnen Sie eine Verbindung:

Dies erfordert die Verwendung der DriverManager.getConnection () -Methode, um ein Verbindungsobjekt zu erstellen, das eine physische Verbindung mit der Datenbank wie folgt darstellt:

//STEP 3: Open a connection
//  Database credentials
static final String USER = "username";
static final String PASS = "password";
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);

Führen Sie eine Abfrage aus:

Dies erfordert die Verwendung eines Objekts vom Typ Statement oder PreparedStatement zum Erstellen und Senden einer SQL-Anweisung an die Datenbank wie folgt:

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

Wenn eine SQL UPDATE-, INSERT- oder DELETE-Anweisung erforderlich ist, ist das folgende Codefragment erforderlich:

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);

Daten aus der Ergebnismenge extrahieren:

Dieser Schritt ist erforderlich, wenn Sie Daten aus der Datenbank abrufen. Sie können die entsprechende ResultSet.getXXX () -Methode verwenden, um die Daten wie folgt aus der Ergebnismenge abzurufen:

//STEP 5: Extract data from result set
while(rs.next()){
    //Retrieve by column name
    int id  = rs.getInt("id");
    int age = rs.getInt("age");
    String first = rs.getString("first");
    String last = rs.getString("last");

    //Display values
    System.out.print("ID: " + id);
    System.out.print(", Age: " + age);
    System.out.print(", First: " + first);
    System.out.println(", Last: " + last);
}

Räumen Sie die Umwelt auf:

Sie sollten alle Datenbankressourcen explizit schließen, anstatt sich wie folgt auf die Garbage Collection der JVM zu verlassen:

//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();

Erstes JDBC-Programm:

Basierend auf den obigen Schritten können wir folgenden konsolidierten Beispielcode haben, den wir als Vorlage beim Schreiben unseres JDBC-Codes verwenden können:

Dieser Beispielcode wurde basierend auf der Umgebung und der Datenbankeinrichtung im Kapitel Umgebung geschrieben.

//STEP 1. Import required packages
import java.sql.*;

public class FirstExample {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

         //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }// nothing we can do
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end FirstExample

Lassen Sie uns nun das obige Beispiel wie folgt kompilieren:

C:\>javac FirstExample.java
C:\>

Wenn du rennst FirstExampleerzeugt es folgendes Ergebnis:

C:\>java FirstExample
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

SQLException-Methoden:

Eine SQLException kann sowohl im Treiber als auch in der Datenbank auftreten. Wenn eine solche Ausnahme auftritt, wird ein Objekt vom Typ SQLException an die catch-Klausel übergeben.

Für das übergebene SQLException-Objekt stehen die folgenden Methoden zum Abrufen zusätzlicher Informationen zur Ausnahme zur Verfügung:

Methode Beschreibung
getErrorCode () Ruft die der Ausnahme zugeordnete Fehlernummer ab.
getMessage () Ruft die Fehlermeldung des JDBC-Treibers für einen vom Treiber behandelten Fehler ab oder ruft die Oracle-Fehlernummer und die Meldung für einen Datenbankfehler ab.
getSQLState () Ruft die XOPEN SQLstate-Zeichenfolge ab. Bei einem JDBC-Treiberfehler werden von dieser Methode keine nützlichen Informationen zurückgegeben. Bei einem Datenbankfehler wird der fünfstellige XOPEN SQLstate-Code zurückgegeben. Diese Methode kann null zurückgeben.
getNextException () Ruft das nächste Ausnahmeobjekt in der Ausnahmekette ab.
printStackTrace () Druckt die aktuelle oder auslösbare Ausnahme und deren Rückverfolgung in einen Standardfehlerstrom.
printStackTrace (PrintStream s) Druckt dieses Throwable und seine Rückverfolgung auf den von Ihnen angegebenen Druckstrom.
printStackTrace (PrintWriter w) Druckt dieses Wurfobjekt und seine Rückverfolgung auf den von Ihnen angegebenen Druckschreiber.

Mithilfe der im Exception-Objekt verfügbaren Informationen können Sie eine Ausnahme abfangen und Ihr Programm entsprechend fortsetzen. Hier ist die allgemeine Form eines Try-Blocks:

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces, similar to the exception clause 
   // in a PL/SQL block.
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

JDBC - Datentypen:

In der folgenden Tabelle ist der Standard-JDBC-Datentyp zusammengefasst, in den der Java-Datentyp konvertiert wird, wenn Sie die setXXX () -Methode des PreparedStatement- oder CallableStatement-Objekts oder die ResultSet.updateXXX () -Methode aufrufen.

SQL JDBC / Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
VERKOHLEN java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BISSCHEN Boolescher Wert setBoolean updateBoolean
NUMERISCH java.math.BigDecimal setBigDecimal updateBigDecimal
Winzig Byte setByte updateByte
SMALLINT kurz setShort updateShort
GANZE ZAHL int setInt updateInt
BIGINT lange setLong updateLong
ECHT schweben setFloat updateFloat
SCHWEBEN schweben setFloat updateFloat
DOPPELT doppelt setDouble updateDouble
VARBINARY Byte [] setBytes updateBytes
BINÄR Byte [] setBytes updateBytes
DATUM java.sql.Date Datum einstellen Aktualisierungsdatum
ZEIT java.sql.Time Zeit einstellen Updatezeit
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
KLECKS java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
STRUKT java.sql.Struct SetStruct updateStruct

JDBC 3.0 bietet erweiterte Unterstützung für die Datentypen BLOB, CLOB, ARRAY und REF. Das ResultSet-Objekt verfügt jetzt über die Methoden updateBLOB (), updateCLOB (), updateArray () und updateRef (), mit denen Sie die entsprechenden Daten auf dem Server direkt bearbeiten können.

Mit den Methoden setXXX () und updateXXX () können Sie bestimmte Java-Typen in bestimmte JDBC-Datentypen konvertieren. Mit den Methoden setObject () und updateObject () können Sie fast jeden Java-Typ einem JDBC-Datentyp zuordnen.

Das ResultSet-Objekt bietet für jeden Datentyp die entsprechende Methode getXXX (), um den Spaltenwert abzurufen. Jede Methode kann mit Spaltennamen oder anhand ihrer Ordnungsposition verwendet werden.

SQL JDBC / Java setXXX getXXX
VARCHAR java.lang.String setString getString
VERKOHLEN java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BISSCHEN Boolescher Wert setBoolean getBoolean
NUMERISCH java.math.BigDecimal setBigDecimal getBigDecimal
Winzig Byte setByte getByte
SMALLINT kurz setShort getShort
GANZE ZAHL int setInt getInt
BIGINT lange setLong getLong
ECHT schweben setFloat getFloat
SCHWEBEN schweben setFloat getFloat
DOPPELT doppelt setDouble getDouble
VARBINARY Byte [] setBytes getBytes
BINÄR Byte [] setBytes getBytes
DATUM java.sql.Date Datum einstellen Verabredung bekommen
ZEIT java.sql.Time Zeit einstellen Zeit bekommen
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
KLECKS java.sql.Blob setBlob getBlob
ARRAY java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
STRUKT java.sql.Struct SetStruct getStruct

JDBC - Stapelverarbeitung:

Mit der Stapelverarbeitung können Sie verwandte SQL-Anweisungen in einem Stapel gruppieren und mit einem Aufruf an die Datenbank senden.

Wenn Sie mehrere SQL-Anweisungen gleichzeitig an die Datenbank senden, reduzieren Sie den Kommunikationsaufwand und verbessern so die Leistung.

  • JDBC-Treiber sind nicht erforderlich, um diese Funktion zu unterstützen. Sie sollten die DatabaseMetaData.supportsBatchUpdates () -Methode verwenden, um festzustellen, ob die Zieldatenbank die Stapelaktualisierungsverarbeitung unterstützt. Die Methode gibt true zurück, wenn Ihr JDBC-Treiber diese Funktion unterstützt.

  • Das addBatch()Die Methoden Statement, PreparedStatement und CallableStatement werden verwendet, um dem Stapel einzelne Anweisungen hinzuzufügen. DasexecuteBatch() wird verwendet, um die Ausführung aller zusammen gruppierten Anweisungen zu starten.

  • Das executeBatch() Gibt ein Array von Ganzzahlen zurück, und jedes Element des Arrays repräsentiert die Aktualisierungsanzahl für die jeweilige Aktualisierungsanweisung.

  • So wie Sie einem Stapel Anweisungen zur Verarbeitung hinzufügen können, können Sie sie mit dem entfernen clearBatch()Methode. Diese Methode entfernt alle Anweisungen, die Sie mit der Methode addBatch () hinzugefügt haben. Sie können jedoch nicht selektiv auswählen, welche Anweisung entfernt werden soll.

JDBC - Streaming von Daten:

Ein PreparedStatement-Objekt kann Eingabe- und Ausgabestreams verwenden, um Parameterdaten bereitzustellen. Auf diese Weise können Sie ganze Dateien in Datenbankspalten einfügen, die große Werte enthalten können, z. B. CLOB- und BLOB-Datentypen.

Es gibt folgende Methoden, mit denen Daten gestreamt werden können:

  • setAsciiStream(): Diese Methode wird verwendet, um große ASCII-Werte bereitzustellen.

  • setCharacterStream(): Diese Methode wird verwendet, um große UNICODE-Werte bereitzustellen.

  • setBinaryStream(): Diese Methode wird verwendet, um große Binärwerte bereitzustellen.

Die Methode setXXXStream () erfordert neben dem Parameterplatzhalter einen zusätzlichen Parameter, die Dateigröße. Dieser Parameter informiert den Treiber darüber, wie viele Daten mithilfe des Streams an die Datenbank gesendet werden sollen.

Für ein Detail zu all diesen Konzepten müssen Sie das gesamte Tutorial durchgehen.