Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
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?

Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel

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
Pfeil 22 Datenbankmanagement mit JDBC
Pfeil 22.1 Das relationale Modell
Pfeil 22.2 Datenbanken und Tools
Pfeil 22.2.1 HSQLDB
Pfeil 22.2.2 Weitere Datenbanken
Pfeil 22.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken
Pfeil 22.3 JDBC und Datenbanktreiber
Pfeil 22.3.1 Treibertypen
Pfeil 22.3.2 JDBC-Versionen
Pfeil 22.4 Eine Beispielabfrage
Pfeil 22.4.1 Schritte zur Datenbankabfrage
Pfeil 22.4.2 Client für HSQLDB-Datenbank
Pfeil 22.5 Mit Java an eine Datenbank andocken
Pfeil 22.5.1 Der Treiber-Manager
Pfeil 22.5.2 Den Treiber laden
Pfeil 22.5.3 Eine Aufzählung aller Treiber
Pfeil 22.5.4 Log-Informationen
Pfeil 22.5.5 Verbindung zur Datenbank auf- und abbauen
Pfeil 22.5.6 DataSource
Pfeil 22.5.7 Gepoolte Verbindungen
Pfeil 22.6 Datenbankabfragen
Pfeil 22.6.1 Abfragen über das Statement-Objekt
Pfeil 22.6.2 Ergebnisse einer Abfrage in ResultSet
Pfeil 22.6.3 Java und SQL-Datentypen
Pfeil 22.6.4 Unicode in der Spalte korrekt auslesen
Pfeil 22.6.5 Eine SQL-NULL und wasNull() bei ResultSet
Pfeil 22.6.6 Wie viele Zeilen hat ein ResultSet?
Pfeil 22.7 Die Ausnahmen bei JDBC
Pfeil 22.8 Elemente einer Datenbank hinzufügen und aktualisieren
Pfeil 22.8.1 Batch-Updates
Pfeil 22.9 ResultSets in Bohnen durch RowSet
Pfeil 22.9.1 Die Schnittstelle RowSet
Pfeil 22.9.2 Implementierungen von RowSet
Pfeil 22.9.3 Der Typ CachedRowSet
Pfeil 22.9.4 Der Typ WebRowSet
Pfeil 22.10 Vorbereitete Anweisungen (Prepared Statements)
Pfeil 22.10.1 PreparedStatement-Objekte vorbereiten
Pfeil 22.10.2 Werte für die Platzhalter eines PreparedStatement
Pfeil 22.11 Transaktionen
Pfeil 22.12 Metadaten
Pfeil 22.12.1 Metadaten über die Tabelle
Pfeil 22.12.2 Informationen über die Datenbank
Pfeil 22.13 Einführung in SQL
Pfeil 22.13.1 Ein Rundgang durch SQL-Anfragen
Pfeil 22.13.2 Datenabfrage mit der Data Query Language (DQL)
Pfeil 22.13.3 Tabellen mit der Data Definition Language (DDL) anlegen
Pfeil 22.14 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

22.3 JDBC und Datenbanktreiber Zur nächsten ÜberschriftZur vorigen Überschrift

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 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.


Galileo Computing - Zum Seitenanfang

22.3.1 Treibertypen Zur nächsten ÜberschriftZur vorigen Überschrift

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 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.


Galileo Computing - Zum Seitenanfang

22.3.2 JDBC-Versionen topZur vorigen Überschrift

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 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 supportsANSI92XXXSQL(), 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.






<< zurück



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