Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Die Funktionsbibliothek
10 Threads und nebenläufige Programmierung
11 Raum und Zeit
12 Datenstrukturen und Algorithmen
13 Dateien und Datenströme
14 Die eXtensible Markup Language (XML)
15 Grafische Oberflächen mit Swing
16 Grafikprogrammierung
17 Netzwerkprogrammierung
18 Verteilte Programmierung mit RMI und Web-Services
19 JavaServer Pages und Servlets
20 Applets
21 Midlets und die Java ME
22 Datenbankmanagement mit JDBC
23 Reflection und Annotationen
24 Logging und Monitoring
25 Sicherheitskonzepte
26 Java Native Interface (JNI)
27 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort
Download: - ZIP, ca. 12,5 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> /Java-Insel | vor >>
Java ist auch eine Insel von Christian Ullenboom Programmieren mit der Java Standard Edition Version 6
Java ist auch eine Insel 7., aktualisierte Auflage geb., mit DVD (November 2007) 1.492 S., 49,90 Euro Galileo Computing ISBN 978-3-8362-1146-8 |
| 22 Datenbankmanagement mit JDBC
|  | 22.1 Das relationale Modell
|  | 22.2 Datenbanken und Tools
|  |  | 22.2.1 HSQLDB
|  |  | 22.2.2 Weitere Datenbanken
|  |  | 22.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken
|  | 22.3 JDBC und Datenbanktreiber
|  |  | 22.3.1 Treibertypen
|  |  | 22.3.2 JDBC-Versionen
|  | 22.4 Eine Beispielabfrage
|  |  | 22.4.1 Schritte zur Datenbankabfrage
|  |  | 22.4.2 Client für HSQLDB-Datenbank
|  | 22.5 Mit Java an eine Datenbank andocken
|  |  | 22.5.1 Der Treiber-Manager
|  |  | 22.5.2 Den Treiber laden
|  |  | 22.5.3 Eine Aufzählung aller Treiber
|  |  | 22.5.4 Log-Informationen
|  |  | 22.5.5 Verbindung zur Datenbank auf- und abbauen
|  |  | 22.5.6 DataSource
|  |  | 22.5.7 Gepoolte Verbindungen
|  | 22.6 Datenbankabfragen
|  |  | 22.6.1 Abfragen über das Statement-Objekt
|  |  | 22.6.2 Ergebnisse einer Abfrage in ResultSet
|  |  | 22.6.3 Java und SQL-Datentypen
|  |  | 22.6.4 Unicode in der Spalte korrekt auslesen
|  |  | 22.6.5 Eine SQL-NULL und wasNull() bei ResultSet
|  |  | 22.6.6 Wie viele Zeilen hat ein ResultSet?
|  | 22.7 Die Ausnahmen bei JDBC
|  | 22.8 Elemente einer Datenbank hinzufügen und aktualisieren
|  |  | 22.8.1 Batch-Updates
|  | 22.9 ResultSets in Bohnen durch RowSet
|  |  | 22.9.1 Die Schnittstelle RowSet
|  |  | 22.9.2 Implementierungen von RowSet
|  |  | 22.9.3 Der Typ CachedRowSet
|  |  | 22.9.4 Der Typ WebRowSet
|  | 22.10 Vorbereitete Anweisungen (Prepared Statements)
|  |  | 22.10.1 PreparedStatement-Objekte vorbereiten
|  |  | 22.10.2 Werte für die Platzhalter eines PreparedStatement
|  | 22.11 Transaktionen
|  | 22.12 Metadaten
|  |  | 22.12.1 Metadaten über die Tabelle
|  |  | 22.12.2 Informationen über die Datenbank
|  | 22.13 Einführung in SQL
|  |  | 22.13.1 Ein Rundgang durch SQL-Anfragen
|  |  | 22.13.2 Datenabfrage mit der Data Query Language (DQL)
|  |  | 22.13.3 Tabellen mit der Data Definition Language (DDL) anlegen
|  | 22.14 Zum Weiterlesen
## 22.3 JDBC und Datenbanktreiber JDBC ist die inoffizielle Abkürzung für Java Database Connectivity und bezeichnet einen Satz von Schnittstellen, um relationale Datenbanksysteme von Java zu nutzen. Die erste JDBC-Spezifikation gab es im Juni 1996. Die Schnittstellen und wenigen Klassen sind ab dem JDK 1.1 im Core-Paket integriert. Die JDBC-API und ihre Treiber erreichen eine wirksame Abstraktion von relationalen Datenbanken, sodass durch die einheitliche Programmierschnittstelle die Funktionen differierender Datenbanken in gleicher Weise genutzt werden können. Das Lernen von verschiedenen Zugriffsmethoden für unterschiedliche Datenbanken der Hersteller entfällt. Wie jedoch diese spezielle Datenbank nun wirklich aussieht, verheimlicht uns die Abstraktion. Jede Datenbank hat ihr eigenes Protokoll (und eventuell auch Netzwerkprotokoll), doch die Implementierung ist nur dem Datenbanktreiber bekannt. Das Modell von JDBC setzt auf dem X/OPEN-SQL-Call-Level-Interface (CLI) auf und bietet somit die gleiche Schnittstelle wie Microsofts ODBC (Open [Microsoft und Open? Nicht schlecht. ] Database Connectivity). Dem Programmierer gibt JDBC Funktionen, um Verbindungen zu Datenbanken aufzubauen, Datensätze zu lesen oder neue Datensätze zu verfassen. Zusätzlich können Tabellen aktualisiert und Prozeduren auf der Serverseite ausgeführt werden.
Hinweis Ein JDBC-Treiber muss nicht unbedingt relationale Datenbanken ansprechen, obwohl das der häufigste Fall ist. Mit dem freien xlSQL (https://xlsql.dev.java.net/) steht ein JDBC-Treiber bereit, der auf Excel-Tabellen beziehungsweise CSV-Dateien arbeitet und Oracle bietet mit Synopis (http://www.sunopsis.com/corporate/us/products/jdbcforxml/) ein Produkt, welches statt relationaler Datenbank XML-Dokumente verwendet.
#### Implementierung der JDBC-API Um eine Datenbank anzusprechen zu können, müssen wir einen Treiber haben, der die JDBC-API implementiert und zwischen dem Java-Programm und der Datenbank vermittelt. Jeder Treiber ist üblicherweise anders implementiert, denn er muss die datenbankunabhängige JDBC-API auf die konkrete Datenbank übertragen. Sun veröffentlicht unter http://developers.sun.com/product/jdbc/drivers Treiber zu allen möglichen Datenbanken. Eine Suchmaske erlaubt die Eingabe einer Datenbank und die Auswahl eines gewünschten Typs. ### 22.3.1 Treibertypen Sun definiert vier Treiber-Kategorien, die wir im Folgenden beschreiben. Sie unterscheiden sich im Wesentlichen darin, dass sie über einen nativen Anteil verfügen oder nicht. #### Typ 1: JDBC-ODBC-Brücke ODBC (Open Database Connectivity Standard) ist ein Standard von Microsoft, der den Zugriff auf Datenbanken über eine genormte Schnittstelle möglich macht. ODBC ist insbesondere in der Windows-Welt weit verbreitet, und für jede ernst zu nehmende Datenbank gibt es einen Treiber. Da es am Anfang der JDBC-Entwicklung keine Treiber gab, haben sich JavaSoft und Intersolv (seit 2000 Merant) etwas ausgedacht: eine JDBC-ODBC-Brücke, die die Aufrufe von JDBC in ODBC-Aufrufe der Clientseite umwandelt. Da die Performance oft nicht optimal und die Brücke nicht auf jeder Plattform verfügbar ist, stellt diese JDBC-Anbindung häufig eine Notlösung dar. Und weil ODBC eine systembezogene Lösung ist, hat der Typ-1-Treiber native Methoden, was die Portierung und seinen Einsatz – etwa über das Netz – erschwert. Die JDBC-ODBC-Brücke implementiert seit Version 1.4 den JDBC 2-Standard.
Hinweis Die Geschwindigkeit des Zugriffs über die JDBC-ODBC-Brücke hängt von vielen Faktoren ab, ist aber im Allgemeinen nicht so gut. Der Grund ist, dass die Abfrage unter JDBC bis zur Datenbank viele Schichten durchläuft. Jede der Schichten übersetzt die Anfragen für die nächste Schicht. Zusätzlich kommen zum Zeitaufwand noch Inkompatibilitäten und Fehler hinzu. Somit hängt das Gelingen der JDBC-ODBC-Brücke von vielen Schichten ab und ist oft nicht so performant wie eine native Implementierung.
#### Typ 2: Native plattformeigene JDBC-Treiber Diese Treiber übersetzen die JDBC-Aufrufe direkt in Aufrufe der Datenbank-API. Dazu enthält der Treiber Programmcode, der native Methoden aufruft. Treiber vom Typ 1 oder 2 sind nicht portabel, da sie zum einen für die JDBC-ODBC-Brücke auf die Plattform-Bibliothek für ODBC zurückgreifen müssen und zum anderen auf plattformspezifische Zugriffsmöglichkeiten für die Datenbank angewiesen sind. Damit ist der Nachteil verbunden, dass Applets mit diesen Treibern nichts anfangen können. Ein Applet erlaubt es nicht, nativen Code von anderen Quellen zu laden und auszuführen. Das ist nicht leicht, wenn etwa ein Macintosh mit Power-PC-Prozessor einen binären Treiber für eine MS-SQL-Datenbank installieren möchte. Die Quintessenz daraus: Applets können damit keine Verbindung zu einer externen Datenquelle aufbauen. #### Typ 3: Universelle JDBC-Treiber Der universelle JDBC-Treiber ist ein in Java programmierter Treiber, der beim Datenbankzugriff auf den Client geladen wird. Der Treiber kommuniziert mit der Datenbank nicht direkt, sondern mit einer Softwareschicht, die zwischen der Anwendung und der Datenbank sitzt: der Middleware. Damit erfüllen Typ-3-Treiber eine Vermittlerrolle, denn erst die Middleware leitet die Anweisungen an die Datenbank weiter. Für Applets und Internet-Dienste hat ein Typ-3-Treiber den großen Vorteil, dass ihre Klassendateien oft kleiner als Typ-4-Treiber sind, da ein komprimiertes Protokoll eingesetzt werden kann. Über das spezielle Protokoll zur Middleware ist auch eine Verschlüsselung der Verbindung möglich. Kaum eine Datenbank unterstützt verschlüsselte Datenbankverbindungen. Da zudem das Middleware-Protokoll unabhängig von der Datenbank ist, müssen auf der Clientseite für einen Datenbankzugriff auf mehrere Datenbanken auch nicht mehr alle Treiber installiert werden, sondern im günstigsten Fall nur noch ein Typ-3-Treiber von einem Anbieter. Die Ladezeiten sind damit deutlich geringer. #### Typ 4: Direkte Netzwerktreiber Diese Treiber sind vollständig in Java programmiert und kommunizieren direkt mit dem Datenbank-Server. Sie sprechen über das datenbankspezifische Protokoll direkt mit der Datenbank über einen offenen IP-Port. Dies ist in einer Direktverbindung die performanteste Lösung. Sie ist jedoch nicht immer realisierbar, etwa bei Datenbanken wie MS-Access, dBase oder Paradox, die kein Netzwerkprotokoll definieren. ### 22.3.2 JDBC-Versionen Mit den Java-Versionen ist auch die Versionsnummer von JDBC gestiegen. Am Anfang stand JDBC 1.0, was Sun im Jahre 1997 in Java 1.1 integriert hat. JDBC 1.0 basiert auf SQL-92. Die nächste Spezifikation ist die JDBC 2.0 API. Sie berücksichtigt SQL-99 (SQL-3). Die Spezifikation der Version 2 setzt sich aus zwei Teilen zusammen: einer JDBC 2.0 core API und einer JDBC 2.0 Optional Package API. Die Core API im Paket java.sql erweitert das Ur-JDBC um Batch-Updates und SQL-3-Datentypen. Das JDBC Optional Package liegt im Paket javax.sql und definiert unter anderem Data-Source, Connection-Pooling und verteilte Transaktionen. Während das Core-Paket fester Teil von Java 1.2 war, ist das optionale Paket in Java 1.2 noch echt optional und erst in Java 1.3 fest integriert. Für fast alle Datenbanken gibt es JDBC-2.0-Treiber. JDBC 3.0 ist Teil von Java 1.4. Es integriert die JDBC 2.1 core API, das JDBC 2.0 Optional Package und nimmt neu unter anderem hinzu: Savepoints in Transaktionen, Wiederverwendung von PreparedStatements, JDBC-Datentypen BOOLEAN und DATALINK, Abrufen automatisch generierter Schlüssel, Änderungen von LOBs und mehrere gleichzeitig geöffnete ResultSets. In Java 5 hat sich nicht viel an JDBC geändert. Es ist immer noch JDBC 3.0, doch sind JDBC-RowSet-Implementierungen hinzugekommen. JDBC 4.0 ist Teil von Java 6 mit einigen Änderungen: Es gibt Annotationen für SQL-Queries, Treiber werden – wenn vorbereitet – automatisch angemeldet, es gibt XML-Datentypen aus SQL:2003 und Zugriff auf die SQL ROWID.
Hinweis Eine große Anzahl JDBC-4-Treiber ist so schnell nicht zu erwarten. http://developers.sun.com/product/jdbc/drivers zählt bislang keinen JDBC-4-Treiber auf – obwohl die Sun-eigene Datenbank Java DB durchaus JDBC 4 spricht. Für JDBC 3 gibt es immerhin 38 Treiber; 99 sind JDBC 2 Treiber.
#### Grad der SQL-Unterstützung Auch wenn uns der neueste Treiber einer Datenbank vorliegt, heißt das nicht, dass er auch alle JDBC-Möglichkeiten ausschöpft. Zum einen kann das daran liegen, dass die Datenbank diese Möglichkeiten gar nicht bietet – etwa Savepoints – oder dass der Treiber nicht hinreichend aktuell ist. Einige Möglichkeiten lassen sich über die Metadaten einer Datenbank erfragen. Dazu zählt zum Beispiel, ob ein Treiber beziehungsweise eine Datenbank den vollen ANSI-92-Standard unterstützt. Die Metadaten liefern über die Methoden supportsANSI92 XXX SQL(), ob die Datenbank ANSI 92 Entry Level (gilt immer), Intermediate SQL oder Full SQL unterstützt. Auch für ODBC gibt es unterschiedliche Level: Minimum SQL Grammar, Core SQL Grammar, Extended SQL Grammar. Weitere Informationen gibt die Sun-Webseite http://java.sun.com/products/jdbc/driverdevs.html. ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.
Name |
E-Mail |
Ihr Kommentar |
<< zurück | <top> | vor >>

Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de