Java -Datenbankkonnektivität

JDBC
Entwickler (en) Oracle Corporation
Stabile Version
JDBC 4.3 / 21. September 2017
Betriebssystem Plattformübergreifend
Typ Datenzugriffs -API
Webseite JDBC API Guide

Java -Datenbankkonnektivität (JDBC) ist ein Programmierschnittstelle (API) für die Programmiersprache Java, was definiert, wie ein Kunde auf a zugreifen kann Datenbank. Es handelt sich um eine Java-basierte Datenzugriffstechnologie, die für die Java-Datenbankkonnektivität verwendet wird. Es ist Teil der Java Standard Edition Plattform, von Oracle Corporation. Es bietet Methoden zum Abfragen und Aktualisieren von Daten in einer Datenbank und ist darauf ausgerichtet relationale Datenbanken. Ein jdbc-to-ODBC Bridge ermöglicht Verbindungen zu jeder ODBC-zugänglichen Datenquelle in der Java virtuelle Maschine (JVM) Hostumgebung.

Geschichte und Umsetzung

Sun Microsystems veröffentlichte JDBC als Teil von Java Entwickler-Kit (JDK) 1.1 am 19. Februar 1997.[1] Seitdem ist es Teil der Java -Plattform, Standard Edition (Java SE).

Die JDBC -Klassen sind in der enthalten Java -Paket Java.sql und javax.sql.

Ab Version 3.1 wurde JDBC unter dem entwickelt Java Community -Prozess. JSR 54 Gibt JDBC 3.0 (in J2SE 1.4 enthalten) an, JSR 114 die JDBC -Rowset -Ergänzungen an, und JSR 221 ist die Spezifikation von JDBC 4.0 (enthalten in Java SE 6).[2]

JDBC 4.1 wird durch eine Wartungsveröffentlichung 1 von JSR 221 angegeben[3] und ist in Java SE 7 enthalten.[4]

JDBC 4.2 wird durch eine Wartung Release 2 von JSR 221 angegeben[5] und ist in Java SE 8 enthalten.[6]

Die neueste Version, JDBC 4.3, wird durch eine Wartungsveröffentlichung 3 von JSR 221 angegeben[7] und ist in Java SE 9 enthalten.[8]

Funktionalität

Mit JDBC ('Java -Datenbankkonnektivität') können mehrere Implementierungen existieren und von derselben Anwendung verwendet werden. Die API bietet einen Mechanismus zum dynamischen Laden der richtigen Java -Pakete und zum Registrieren des JDBC -Treibermanagers. Der Treibermanager wird als Verbindungsfabrik zum Erstellen von JDBC -Verbindungen verwendet.

JDBC Connections unterstützen das Erstellen und Ausführen von Anweisungen. Dies können Aktualisierungsanweisungen wie SQLs sein SCHAFFEN, EINFÜGUNG, AKTUALISIEREN und LÖSCHENoder sie können Abfrageberechnungen wie z. AUSWÄHLEN. Darüber hinaus können gespeicherte Verfahren über eine JDBC -Verbindung aufgerufen werden. JDBC repräsentiert Aussagen unter Verwendung einer der folgenden Klassen:

  • Aussage - Die Anweisung wird jedes Mal an den Datenbankserver gesendet.
  • Vorbereitete Station - Die Aussage wird zwischengespeichert und dann die Ausführungspfad ist auf dem Datenbankserver festgelegt, sodass er mehrmals effizient ausgeführt wird.
  • CallAnlestatement - zum Ausführen verwendet Gespeicherte Prozeduren Auf der Datenbank.

Aktualisieren von Anweisungen wie Einfügen, Aktualisieren und Löschen einer Aktualisierungsanzeige, die angibt, wie viele Reihen wurden in der Datenbank betroffen. Diese Aussagen geben keine anderen Informationen zurück.

Abfrageanweisungen geben ein JDBC -Zeilenergebnis zurück. Das Zeilenergebnissatz wird verwendet, um über die zu gehen Ergebnisset. Individuell Säulen In einer Zeile werden entweder mit Namen oder nach Spaltennummer abgerufen. Es kann eine beliebige Anzahl von Zeilen im Ergebnissatz geben. Das Zeilenergebnissatz hat Metadaten, die die Namen der Spalten und ihrer Typen beschreiben.

Es gibt eine Erweiterung der grundlegenden JDBC -API in der javax.sql.

JDBC -Verbindungen werden häufig über a verwaltet Verbindungspool anstatt direkt vom Fahrer zu erhalten.

Hostdatenbanktypen, in die Java mit einer Funktion konvertieren kann
Oracle Datentyp setxxx () Methoden
VERKOHLEN setString ()
Varchar2 setString ()
NUMMER setbigdecimal ()
setboolean ()
setByte ()
setshort ()
setInt ()
setlong ()
setfloat ()
setDouble ()
GANZE ZAHL setInt ()
SCHWEBEN setDouble ()
CLOB setClob ()
KLECKS setBlob ()
ROH setBytes ()
Longraw setBytes ()
DATUM Datum einstellen()
Zeit einstellen()
setTimestamp ()


Beispiele

Wenn eine Java -Anwendung eine Datenbankverbindung benötigt, einer der DriverManager.getConnection () Methoden werden verwendet, um eine JDBC -Verbindung zu erstellen. Die verwendete URL hängt von der jeweiligen Datenbank und dem JDBC -Treiber ab. Es wird immer mit dem Protokoll "JDBC:" beginnen, aber der Rest liegt beim jeweiligen Anbieter.

Verbindung Conn = DriverManager.GetConnection(  "JDBC: SOMLJDBCVENDOR: Andere Daten, die von einem JDBC -Anbieter benötigt werden", ",  "Mylogin",  "mein Passwort"); Versuchen {  / * Sie verwenden die Verbindung hier */// } endlich {  // Es ist wichtig, die Verbindung zu schließen, wenn Sie damit fertig sind  Versuchen {   Conn.nah dran();  } Fang (Throwierbar e) { /* Propagieren Sie die ursprüngliche Ausnahme                                 anstelle dieser, die Sie nur angemeldet haben */   Logger.warnen("Konnte die JDBC -Verbindung nicht schließen",e);  } } 

Ab Java SE 7 können Sie Java's verwenden Versuchen Sie mit Ressourcen Anweisung, um den obigen Code einfacher zu machen:

Versuchen (Verbindung Conn = DriverManager.GetConnection(  "JDBC: SOMLJDBCVENDOR: Andere Daten, die von einem JDBC -Anbieter benötigt werden", ",  "Mylogin",  "mein Passwort")) {  / * Sie verwenden die Verbindung hier */// }  // Die VM kümmert sich um die Schließung der Verbindung 

Sobald eine Verbindung hergestellt ist, kann eine Erklärung erstellt werden.

Versuchen (Aussage stmt = Conn.Schaffung()) {  stmt.ExecuteUpdate("In mytable (Name) Werte einfügen ('mein Name')"); } 

Beachten Sie, dass Verbindungen, Aussagen und Ergebnisse häufig zusammenhängen Betriebssystem Ressourcen wie Sockets oder Dateideskriptoren. Bei Verbindungen zu Remote -Datenbankservern werden weitere Ressourcen auf dem Server gebunden, z. B.,. Cursoren für aktuell offene Ergebnissen. Es ist wichtig für nah dran() Jedes JDBC -Objekt, sobald es seine Rolle gespielt hat;Müllsammlung sollte nicht auf verlassen werden. Das obige Konstrukt mit Ressourcen ist ein Codemuster, das dies vermeidet.

Daten werden mit einem Datenbankabfragemechanismus aus der Datenbank abgerufen. Das folgende Beispiel zeigt das Erstellen einer Anweisung und die Ausführung einer Abfrage.

Versuchen (Aussage stmt = Conn.Schaffung();  Ergebnis Rs = stmt.ExecuteQuery("Wählen Sie * aus mytable") ) {  während (Rs.nächste()) {  int Distriktiern = Rs.GetMetadata().GetColumnCount();  zum (int i = 1; i <= Distriktiern; i++) {  // Spaltennummern beginnen bei 1.  // Außerdem gibt es viele Methoden im Ergebnis der Rückkehr zur Rückkehr  // die Spalte als bestimmter Typ. Beziehen Sie sich auf die Sonnendokumentation  // für die Liste der gültigen Conversions.  System.aus.println( "SÄULE " + i + "=" + Rs.GetObject(i));  }  } } 

Ein Beispiel für a Vorbereitete Station Abfrage, verwendet Conn und Klasse vom ersten Beispiel.

Versuchen (Vorbereitete Station ps =  Conn.Vorbereitungen("Wählen Sie i.*, J.* Von Omega I, Zappa j wo i.name =? Und j.num =?") ) {  // In der SQL -Erklärung ist jedes Fragezeichen ein Platzhalter  // Das muss durch einen Wert ersetzt werden, den Sie über einen "Set" -Methode -Aufruf bereitstellen.  // Die folgenden zwei Methodenaufrufe ersetzen die beiden Platzhalter. das erste ist  // durch einen Stringwert und die zweite durch einen Ganzzahlwert ersetzt.  ps.setString(1, "Arme Yorick");  ps.setInt(2, 8008);  // Das Ergebnis, RS, vermittelt das Ergebnis der Ausführung der SQL -Anweisung.  // Jedes Mal, wenn Sie Rs.Next (), einen internen Zeilenzeiger oder Cursor nennen,  // wird in die nächste Zeile des Ergebniss fortgeschritten. Der Cursor ist anfangs  // vor der ersten Reihe positioniert.  Versuchen (Ergebnis Rs = ps.ExecuteQuery()) {  während (Rs.nächste()) {  int Distriktiern = Rs.GetMetadata().GetColumnCount();  zum (int i = 1; i <= Distriktiern; i++) {  // Spaltennummern beginnen bei 1.  // Außerdem gibt es viele Methoden im Ergebnis der Rückkehr zur Rückkehr  // die Spalte als bestimmter Typ. Beziehen Sie sich auf die Sonnendokumentation  // für die Liste der gültigen Conversions.  System.aus.println("SÄULE " + i + "=" + Rs.GetObject(i));  } // zum  } // während  } // Versuchen } // Versuchen 

Wenn ein Datenbankvorgang fehlschlägt, erhöht JDBC eine Sqlexception. Es gibt in der Regel sehr wenig, um sich von einem solchen Fehler zu erholen, abgesehen von der Anmeldung so viel Detail wie möglich. Es wird empfohlen, die SQLEXception in eine Anwendungsdomänenausnahme (eine ungeprüfte) übersetzt zu werden, die schließlich zu einem Transaktionsrollback und einer Benachrichtigung an den Benutzer führt.

Ein Beispiel für a Datenbanktransaktion:

Boolesche AutoCommitDefault = Conn.Getautocommit(); Versuchen {  Conn.setAutocommit(FALSCH);  / * Sie führen Anweisungen gegen Conn hier transaktional */aus  Conn.verpflichten(); } Fang (Throwierbar e) {  Versuchen { Conn.Rollback(); } Fang (Throwierbar e) { Logger.warnen("Konnte keine Rollback -Transaktion", e); }  Wurf e; } endlich {  Versuchen { Conn.setAutocommit(AutoCommitDefault); } Fang (Throwierbar e) { Logger.warnen("Konnte die autokommitische Einstellung nicht wiederherstellen",e); } } 

Für ein Beispiel von a CallAnlestatement (Um gespeicherte Prozeduren in der Datenbank aufzurufen) siehe die JDBC API Guide Dokumentation.

importieren java.sql.connection; importieren java.sql.drivermanager; importieren java.sql.statement; Öffentlichkeit Klasse Mydb1 {  statisch Saite URL = "JDBC: Mysql: // localhost/mydb";  Öffentlichkeit statisch Leere hauptsächlich(Saite[] Args) {  Versuchen {  Klasse.Forname("com.mysql.jdbc.driver");  Verbindung Conn = DriverManager.GetConnection(URL, "Wurzel", "Wurzel");  Aussage stmt = Conn.Schaffung();         Saite sql = "In EMP1 -Werte einfügen ('PCTB5361', 'Kiril', 'John', 968666668)";  stmt.ExecuteUpdate(sql);              System.aus.println("Datensätze in die Tabelle eingefügt ...");  } Fang (Ausnahme e) {  e.printstacktrace();  }  } } 


JDBC -Treiber

JDBC-Treiber sind kundenseitig Adapter (Installiert auf dem Client -Computer, nicht auf dem Server), das Anfragen von Java -Programmen in ein Protokoll umwandelt, das die DBMs verstehen können.

Typen

Kommerzielle und kostenlose Treiber bieten Konnektivität zu den meisten Server für relationale Datendaten. Diese Treiber fallen in einen der folgenden Typen:

  • Typ 1 Dieser native Code des lokal verfügbaren ODBC -Treibers aufruft. (Hinweis: In JDBC 4.2 wurde die JDBC-ODBC Bridge entfernt[9])
  • Typ 2 Dadurch wird native Bibliothek des Datenbankanbieters auf einer Client -Seite aufgerufen. Dieser Code spricht dann mit Datenbank über das Netzwerk.
  • Typ 3, Der reine Java-Treiber, der mit der serverseitigen Middleware spricht, die dann mit der Datenbank spricht.
  • Typ 4, der reine Java-Treiber, der natives Datenbank-Protokoll verwendet.

Beachten Sie auch einen Typ, der als interner JDBC -Treiber bezeichnet wird - ein Treiber, der mit JRE in Java -fähigen SQL -Datenbanken eingebettet ist. Es wird genutzt für Java gespeicherte Verfahren. Dies passt nicht oben in das Klassifizierungsschema, obwohl es wahrscheinlich einem Treiber vom Typ 2 oder Typ 4 ähnelt (je nachdem, ob die Datenbank selbst in Java implementiert ist oder nicht). Ein Beispiel hierfür ist der KPRB (Kernel Program Bündel) Treiber[10] geliefert mit Oracle RDBMS. "JDBC: Standard: Verbindung" bietet eine relativ Standard -Methode, um eine solche Verbindung herzustellen (zumindest die Oracle -Datenbank und Apache Derby unterstütze es). Im Fall eines internen JDBC -Treibers wird der JDBC -Client jedoch tatsächlich als Teil der zugegriffenen Datenbank ausgeführt und kann daher eher direkt über Netzwerkprotokolle zugreifen.

Quellen

  • Orakel bietet a Liste einiger JDBC -Fahrer und -verkäufer
  • Simba Technologies Versendet einen SDK zum Aufbau von maßgefertigten JDBC -Treibern für jede benutzerdefinierte/proprietäre relationale Datenquelle
  • CDATA -Software wird JDBC -Treiber für verschiedene Anwendungen, Datenbanken und Web -APIs angeleitet.[11]
  • RSSBUS Typ 4 JDBC -Treiber für Anwendungen, Datenbanken und Webdienste[12]
  • Datadirect Technologies bietet eine umfassende Suite von Fast Typ 4 JDBC -Treibern für alle wichtigen Datenbank, die für sie als Typ 5 werben[13]
  • Die IDS -Software bietet einen JDBC -Treiber vom Typ 3 für den gleichzeitigen Zugriff auf alle wichtigen Datenbanken. Zu den unterstützten Funktionen gehören Ergebnissenset -Caching, SSL -Verschlüsselung, benutzerdefinierte Datenquelle, DBShield
  • Jdbaccess ist eine Java -Persistenzbibliothek für Mysql und Orakel Dies definiert wichtige Datenbankzugriffsvorgänge in einer einfachen verwendbaren API über JDBC
  • JNETDirect bietet eine Reihe von JDBC-Treibern mit J2EE-zertifizierter Hochleistungs-Zertifizierung.
  • JDBCR4 ist ein Serviceprogramm, das von geschrieben wurde von Scott Klement um den Zugriff auf JDBC von zu ermöglichen Rollenspiel auf der Ibm i.[14]
  • Hsqldb ist ein RDBMS mit einem JDBC -Treiber und ist unter einem BSD -Lizenz erhältlich.
  • Schemacrawler[15] ist eine Open -Source -API, die JDBC nutzt und Datenbankmetadaten als einfache alte Java -Objekte (Pojos) zur Verfügung stellt

Siehe auch

Verweise

  1. ^ "Sun Ships JDK 1.1 - Eingeschlossene JavaBeans". www.sun.com. Sun Microsystems. 1997-02-19. Archiviert von das Original am 2008-02-10. Abgerufen 2010-02-15. 19. Februar 1997 - Der JDK 1.1 [...] ist jetzt verfügbar [...]. Diese Veröffentlichung des JDK enthält: [...] robuste neue Funktionen einschließlich JDBC für die Datenbankkonnektivität
  2. ^ JDBC API -Spezifikationsversion: 4.0.
  3. ^ "Das Java Community Process (SM) -Programm - CommunityProcess - MREL". JCP.org. Abgerufen 22. März 2018.
  4. ^ "JDBC 4.1". docs.oracle.com. Abgerufen 22. März 2018.
  5. ^ "Das Java Community Process (SM) -Programm - CommunityProcess - MREL". JCP.org. Abgerufen 22. März 2018.
  6. ^ "JDBC 4.2". docs.oracle.com. Abgerufen 22. März 2018.
  7. ^ "Das Java Community Process (SM) -Programm - CommunityProcess - MREL". JCP.org. Abgerufen 22. März 2018.
  8. ^ "Java.sql (Java SE 9 & Jdk 9)". docs.oracle.com. Abgerufen 22. März 2018.
  9. ^ "Java JDBC API". docs.oracle.com. Abgerufen 22. März 2018.
  10. ^ Greenwald, Rick; Stackowiak, Robert; Stern, Jonathan (1999). Oracle Essentials: Oracle Database 10g. Essentials Series (3 ed.). Sebastopol, Kalifornien: O'Reilly Media, Inc. (veröffentlicht 2004). p. 318. ISBN 9780596005856. Abgerufen 2016-11-03. Der In-Database-JDBC-Treiber (JDBC KPRB)[:] Java Code verwendet die Version JDBC KPRB (Kernel Program Bündel), um auf SQL auf demselben Server zuzugreifen.
  11. ^ "JDBC -Treiber - CDATA -Software". CDATA -Software. Abgerufen 22. März 2018.
  12. ^ "JDBC -Treiber - CDATA -Software". CDATA -Software. Abgerufen 22. März 2018.
  13. ^ "Neuer Typ 5 JDBC -Treiber - Datadirect Connect".
  14. ^ "Greifen Sie auf externe Datenbanken von RPG mit JDBCR4 -Fleisch der Angelegenheit zu". 28. Juni 2012. Abgerufen 12. April 2016.
  15. ^ Sualeh Fatehi. "Schemacrawler". SourceForge.

Externe Links