Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 20 Datenbankmanagement mit JDBC
  gp 20.1 Das relationale Modell
  gp 20.2 JDBC: der Zugriff auf Datenbanken über Java
  gp 20.3 Die Rolle von SQL
    gp 20.3.1 Ein Rundgang durch SQL-Anfragen
    gp 20.3.2 Datenabfrage mit der Data Query Language (DQL)
  gp 20.4 Datenbanktreiber für den Zugriff
  gp 20.5 Datenbanken und ihre Treiber
    gp 20.5.1 Datenbank Interbase und Firebird
    gp 20.5.2 Interbase JDBC-Treiber
    gp 20.5.3 Die freie Datenbank MySQL
    gp 20.5.4 JDBC-Treiber für MySQL
    gp 20.5.5 Die Datenbank Microsoft Access
    gp 20.5.6 Ein Typ 4-Treiber für den Microsoft SQL Server 2000
    gp 20.5.7 Die JDBC-ODBC Bridge
    gp 20.5.8 ODBC einrichten und Access damit verwenden
    gp 20.5.9 Oracle8i Enterprise Edition
  gp 20.6 Eine Beispiel-Abfrage
  gp 20.7 Mit Java an eine Datenbank andocken
    gp 20.7.1 Der Treibermanager
    gp 20.7.2 Eine Aufzählung aller Treiber
    gp 20.7.3 Log-Informationen
    gp 20.7.4 Den Treiber laden
    gp 20.7.5 Wie Treiber programmiert sind
    gp 20.7.6 Verbindung zur Datenbank
  gp 20.8 Datenbankabfragen
    gp 20.8.1 Abfragen über das Statement-Objekt
    gp 20.8.2 Ergebnisse einer Abfrage in ResultSet
    gp 20.8.3 wasNull() bei ResultSet
  gp 20.9 Java und SQL-Datentypen
    gp 20.9.1 Die getXXX()-Methoden
  gp 20.10 Transaktionen
  gp 20.11 Elemente einer Datenbank hinzufügen und aktualisieren
    gp 20.11.1 Batch-Updates
  gp 20.12 Vorbereitete Anweisungen (Prepared Statements)
    gp 20.12.1 PreparedStatement-Objekte vorbereiten
    gp 20.12.2 Werte für die Platzhalter eines PreparedStatement
  gp 20.13 Metadaten
    gp 20.13.1 Metadaten über die Tabelle
    gp 20.13.2 Informationen über die Datenbank
  gp 20.14 Die Ausnahmen bei JDBC
  gp 20.15 Java Data Objects (JDO)


Galileo Computing

20.5 Datenbanken und ihre Treiber  downtop

Wir wollen uns im Folgenden mit einigen Datenbanken und ihren Treibern beschäftigen, die für den Zugriff unter Java geeignet sind.


Galileo Computing

20.5.1 Datenbank Interbase und Firebird  downtop

Die Datenbank Interbase 6.0 (http://www.interbase.com/) von InterBase Software Corporation, eine Tochter der Borland International Inc., implementiert viele Anforderungen aus dem ANSI-SQL-92. Interbase, kurz IB, bietet gespeicherte Prozeduren oder Trigger und ist eine ausgewachsene performante Lösung, die zum Beispiel von Motorola, Nokia, MCI, Northern Telecom, First National Bank of Chicago, Bear Stearns, The Money Store, US-Army, NASA, Boeing, National Semiconductor und Boston Stock Exchange seit Jahren eingesetzt wird. Warum wir uns hier für Interbase und nicht für Oracle, DB 2 oder Microsoft SQL entscheiden, ist darin begründet, dass Borland den Quellcode sowie die ausführbaren Dateien für Windows, Novell Netware und verschiedene UNIX-Versionen wie Linux und Solaris zur Verfügung stellt (http://www.inprise.com/interbase/downloads) und auf eine Variante der Mozilla Public License (MPL) V 1.1 setzt. IB kann auf dem Rechner leicht installiert werden und benötigt wenige Megabytes Hauptspeicher. Firebird (http://firebird.sourceforge.net/) ist die Open-Source-Version von Interbase. Der Lizenz-Unterschied zu Interbase wird in den FAQs erklärt.

Interbase installieren

Nach dem Download der 5.11 MB (für die Version ib_server_6_0_1.zip) können wir mit setup.exe IB installieren. Nach der Installation wird der Server automatisch gestartet und auch bei jedem Windows-Start mit hochgefahren, da er als Windows-Service eingetragen ist. Ändern lässt sich dies unter Start/Programme/InterBase Service Manager.

Obwohl wir den Server auch auf der Konsole administrieren können, ziehen wir eine grafische Bedieneroberfläche vor. Dazu rufen wir unter Start/Programme/InterBase das Programm IBConsole auf. Im linken Baum findet sich unter InterBase Servers eine Auflistung der Server. Bisher ist dort keiner aufgeführt, weshalb wir einen Server eintragen, der automatisch bei der Installation mit installiert wird. Entweder öffnen wir mit Doppelklick auf InterBase Servers den Dialog Register Server and Connect oder wir bringen das Fenster durch den Menüeintrag Servers nach vorne. In den Login-Informationen müssen wir für den Serverzugang Benutzername und Passwort eintragen. Folgende Einträge sind vorbelegt:

User Name: SYSDBA
Passwort: masterkey

Eine Datenbank einbinden

Falten wir im linken Fenster den Baum bei Local Server auf, so treten die Einträge Databases, Backup, Server Log und Users hervor. Bisher ist noch keine Datenbank eingetragen, aber für Übungen wollen wir eine Datenbank verwenden. Um eine Datenbank mit dem Manager zu verbinden, gehen wir entweder über das Menü Database/Register oder aktivieren auf Databases in der Baumansicht mit der rechten Maustaste den ersten Menüpunkt Register.

Nützliche Hilfsprogramme und Konvertieren

Über den grafischen Datenbankadministrator lassen sich Tabellen verwalten, Trigger programmieren und einfache SQL-Anweisungen absetzen. Eine hübsche Erweiterung der Fähigkeiten bietet die InterBase Workbench (kurz IBWorkbench) von Upscene Productions unter http://www.interbaseworkbench.com. Mit diesem Programm lassen sich einfach Tabellen anlegen, Constraints und Rechte festlegen. Integriert ist ein leistungsfähiger SQL-Editor mit Debugger für gespeicherte Prozeduren.

Ein Problem ist immer die Konvertierung von vorhandenen Daten in ein anderes Datenbankformat. Liegen Tabellen zum Beispiel in Microsoft Access vor, und diese sollen nach InterBase wandern, so bietet sich zum Beispiel der Weg über ODBC-Treiber an. Bei der Interbase 6-Version liegt leider kein ODBC-Treiber bei, sodass dieser aus der alten Version bezogen werden muss. Dafür müssen wir unter http://www.interbase. –com/open/downloads/5x_eval_kits.html die ältere Version laden, das Installations-Tool aufrufen und lediglich den ODBC-Treiber installieren. Wird die Datenquelle anschließend im ODBC-Manager eingetragen, so lassen sich die Tabellen von einem beliebigen ODBC-Client lesen. Wer Access nutzt und existierende Daten in die IB importieren möchte, muss über einen kleinen Umweg gehen. Zuerst sollten in der IB-Datenbank die Tabellen mit gleichem Schema angelegt werden. Anschließend sollte die zu konvertierende Tabelle in Access geladen werden und mittels Tabellen verknüpfen auf die IB-Datenbank verwiesen werden. Per Copy&Paste lassen sich jetzt die Daten kopieren. Es gibt leider keinen Weg in Access, mit dem die Schemata der Tabellen aus einer Datenbank auf eine andere übertragen werden können.


Galileo Computing

20.5.2 Interbase JDBC-Treiber  downtop

Aus Java-Sicht interessiert uns bei der InterBase-Datenbank kein ODBC-Treiber, sondern ein Java-Datenbanktreiber. Dieser trägt den Namen InterClient und ist eine hundertprozentige Java-Implementierung. Für die Java-Version gibt es ein plattformabhängiges Installationsprogramm auf den Webseiten von Firebird: http://firebird.sourceforge.net/index.php?op=files&;id=interclient. Die Version Firebird InterClient 2.01 für Windows besitzt lediglich eine Dateilänge von 0.8 MB.

Nach der Installation können wir den Treiber testen und die Test-HTML-Seite CommDiag.html im Installationsverzeichnis (etwa C:\Programme\Firebird\InterClient) des Browsers aufrufen. Die Testseite erzeugt dann ein Java-Fenster und gibt bei laufendem Datenbankserver die Meldung

interbase.interclient.Driver registered

aus.


Galileo Computing

20.5.3 Die freie Datenbank MySQL  downtop

MySQL (http://www.mysql.com/) ist ein häufig eingesetzter freier und schneller Open-Source-Datenbankserver. Er wird oft im Internet in Zusammenhang mit dynamischen Webseiten eingesetzt; das Zusammenspiel Linux, Apache, MySQL, PHP (LAMP-System) ist hoch gelobt.

Eine herausragende Eigenschaft ist Geschwindigkeit und Bedienbarkeit, die teilweise darauf beruht, dass MySQL auf Transaktionen verzichtet. Seit der Version 4 kann eine alternative Datenbank-Engine aber auch Transaktionen ausführen. Das kostenlose Backend MySQL lässt sich sehr gut mit Microsoft Software (Acces, Excel) verbinden, so dass hier Tabellendefinitionen und Anfragen über eine einfach zu bedienende Schnittstelle erfolgen können. MySQL-Front (http://anse.de/mysqlfront/) ist eine freie grafische Oberfläche von Ansgar Becker unter Windows für die MySQL-Datenbank.

Die Entwicklung vom MySQL hatte mSQL als Vorbild und MySQL würde es auch nicht geben, wenn der Entwickler nicht von der mSQL-Entwicklermannschaft enttäuscht worden wäre. Die schwedische Firma T. c. X. DataKonsultAB hatte mSQL ausgiebig für eine webbasierende Anwendung zur Verwaltung von Datenbanken genutzt. Das System hieß UNIREG. Nach ausführlichen Verbesserungsvorschlägen an die Mannschaft von mSQL geschah nichts. Nie. Keine Antwort. Daraufhin entwickelten die Firma (hauptsächlich eine Arbeit von Widenius) auf der Basis von UNIREG und mSQL die neue Datenbank MySQL. Sie wurde im Mai 1995 in der Version 1.0 der Öffentlichkeit vorgestellt. Die Firma T.c.X wurde dann in MySQL AB umbenannt und verdient heute viel Geld mit Support und Schulungen. Seit Juni 2000 ist die MySQL als Open-Source-Software kostenlos verfügbar und steht unter der GNU General Public License (GPL). Lizenzgebühren fallen an, wenn MySQL als integraler Bestandteil der eigenen Anwendung vertrieben wird.

Installation

Wir wollen MySQL in der Version 4 nutzen. Dazu entpacken wir das Zip-Archiv, welches unter http://www.mysql.com/downloads/mysql-4.0.html zum Download liegt. Das Archiv ist etwa 17 MB groß und enthüllt eine Datei install.exe, welche die Installation startet. MySQL schlägt den Pfad c:\mysql vor, den wir beibehalten sollten. (Andernfalls geht es gleich danach mit einer Konfigurationsdatei weiter, und das wollen wir uns ersparen.) Dann kann die Installation ohne weitere Besonderheiten weitergeführt werden.

Wechseln wir anschließend in das Unterverzeichnis bin der Installation. Dort existieren unterschiedlich optimierte Variablen des Servers (Näheres dazu unter http://www.mysql.com/doc/W/i/Windows_prepare_environment.html). Wir wollen mysqld-max-nt nutzen. Das Programm kann mit verschiedenen Optionen aufgerufen werden.

gp  mysqldXXX.exe --standalone (startet den MySQL-Server)
gp  mysqldXXX.exe --install (installiert den MySQL-Server als Dienst)
gp  mysqldXXX.exe --remove (entfernt den MySQL-Server-Dienst)

Wir ziehen erst einmal einen normalen Start ohne Service vor:

C:\mysql\bin>mysqld-max-nt --standalone
InnoDB: The first specified data file .\ibdata1 did not exist:
InnoDB: a new database to be created!
InnoDB: Setting file .\ibdata1 size to 64 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file .\ib_logfile0 did not exist: new to be created
InnoDB: Setting log file .\ib_logfile0 size to 5 MB
InnoDB: Log file .\ib_logfile1 did not exist: new to be created
InnoDB: Setting log file .\ib_logfile1 size to 5 MB
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
020412 12:47:32  InnoDB: Started

MySQL legt einige Tabellen an, und dann läuft der Server.

Wir wollen jetzt eine Datenbank anlegen. Dazu gibt es den Msql-Client. Er existiert einmal als Kommandozeilenprogramm (msql.exe) und als Windows-GUI (MySqlManager.exe). Bleiben wir bei der Kommandozeile.

C:\mysql\bin>mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20 to server version: 4.0.1-alpha-max-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Geben wir help ein, bekommen wir eine Hilfe. Mit exit beenden wir den Client. Geben wir die Tabellen aus, die schon vorhanden sind:

mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.00 sec)

mysql>

Machen wir eine Anfrage. Das funktioniert gut, da MySQL selbst Informationen in Tabellen speichert.

select * form mysql.user;

Natürlich sollten diese Informationen durch Passwort geschützt sein, doch das soll nicht unsere Aufgabe sein.

Die Datenbank test eignet sich sehr gut zum Spielen. Sie ist leer, und hier können zum Testen neue Tabellen angelegt und mit Daten gefüllt werden. Das grafische Tool bietet die gleichen Möglichkeiten, nur mit einer grafischen Schnittstelle. SQL-Kommandos zum Erstellen der Tabellen müssen immer noch von Hand eingegeben werden. Um davon wegzukommen, bietet sich Ansgars MySQL-Front an.

Für die Administration des Servers gibt es ebenfalls ein Kommandozeilenprogramm (mysqladmin.exe) und das Programm mit grafischer Oberfläche (WinMySQLAdmin.exe). Das Passwort ist am Anfang egal, es muss nur etwas dort stehen.


Galileo Computing

20.5.4 JDBC-Treiber für MySQL  downtop

MySQL kann einfach über den unter der LGPL stehenden Typ-4 JDBC-Treiber MM.MySQL bedient werden. Der Treiber von Mark Matthews kann unter http://mmmysql.sourceforge.net/ bezogen werden. Nach dem Entpacken muss das Treiber-.jar-Archiv noch im Klassenpfad aufgenommen werden.


Galileo Computing

20.5.5 Die Datenbank Microsoft Access  downtop

Mit Microsoft Access lässt sich mit wenigen Handgriffen eine Datenbank zusammenbauen. Der folgende Ablauf gilt für Access 2000. Wird Access geöffnet, erscheint ein Dialog mit dem Eintrag »Leere Access-Datenbank«. (Alternativ lässt sich eine neue Datenbank unter dem Menüpunkt »Datei, Neu ...« einrichten.) Wir wählen den ersten Eintrag »Datenbank« und speichern dann die Datenbank unter einem aussagekräftigen Namen. Access benötigen wir nicht mehr direkt, da die Kommunikation mit der Datenbank anschließend über den ODBC-Manager läuft. Dieser setzt dann auf den SQL-Kern von Access auf. Im ODBC-Manager muss dafür die Datenquelle angemeldet werden. Dies beschreiben wir etwas später. Mit SQL können nun die Relationen eingetragen und darauf die Anfragen gestellt werden.

Access wird als Beispiel für die JDBC-ODBC-Brücke beschrieben. Viele Anwender haben das Office-Paket von Microsoft zu Hause installiert und so schon eine Datenbank wie Access in der Nähe. Der Nachteil bei der JDBC-OCBC-Brücke ist jedoch, dass diese erst seit der Version 1.4 den neueren JDBC 2-Standard implementiert.


Galileo Computing

20.5.6 Ein Typ 4-Treiber für den Microsoft SQL Server 2000  downtop

Von der Firma Merant DataDirect >http://www.datadirect-technologies.com/) hat Microsoft einen JDBC-Typ-4-Treiber für den Microsoft SQL Server 2000 lizenziert. Er kann im Microsoft SQL Server Download Center unter www.microsoft.com/sql/downloads/default.asp heruntergeladen werden. Der Treiber unterstützt die Java-Versionen ab 1.1.8 und berücksichtigt die Betriebssysteme Windows, Linux, Solaris AIX und HP-UX.

Merant hat sich auf Datenbanktreiber spezialisiert. Ihr Produkt DataDirect Connect for JDBC unterstützt JDBC 3 für die Datenbanken Oracle, MSSQL, Informix, Sybase und DB2.


Galileo Computing

20.5.7 Die JDBC-ODBC Bridge  downtop

ODBC (Open Database Connectivity Standard) ist ein Standard von Microsoft, der den Zugriff auf Datenbanken über eine genormte Schnittstelle möglich macht. ODBC ist weit verbreitet und auch für Macintosh-Systeme und einige UNIX-Plattformen verfügbar. Um die Anzahl der Produkte, die JDBC nutzen, zu erhöhen, haben JavaSoft und Intersolv (seit 2000 Merant) eine JDBC-ODBC-Brücke entwickelt, die die JDBC-Aufrufe nach ODBC umwandelt. Leider ist diese Brücke nur für Win32- und Solaris-Systeme verfügbar. Das JDK von Sun und deren Lizenznehmer liefern diese Brücke aus, und damit können Java-Entwickler Datenbank-Applikationen mit der Unterstützung einer Vielzahl von existierenden ODBC-Treibern programmieren. In diesem Tutorial wird die JDBC-ODBC-Brücke genutzt, um unter Windows über ODBC auf die Datenbank Microsoft Access zuzugreifen. Es gibt bisher noch keine reinen Java-Treiber (Typ 2-4) für Access, sondern nur die JDBC-ODBC-Brücke.

Damit wir die JDBC-ODBC-Brücke nutzen können, brauchen wir einen ODBC-Treiber für die spezielle Datenbank. ODBC ist kein Teil eines Betriebssystems, sondern muss getrennt installiert werden, zum Beispiel vom Office-Paket oder vom MS SQL-Server. Auch bei Microsofts Webserver, der Windows NT beiliegt, kann ein ODBC-Treiber installiert werden. Da ODBC von Microsoft ist, gibt es ODBC-Treiber nicht für alle Plattformen. Das heißt, die JDBC-ODBC-Bridge fällt für manche Systeme sofort flach. Microsoft liefert Versionen von ODBC für Windows, Windows 95, Windows NT und Macintosh aus. Von verschiedenen Herstellern gibt es Portierungen für einige UNIX-Plattformen, unter anderem Solaris. Ein Projekt unter dem Namen FreeODBC4 hat sich zum Ziel gesetzt, ODBC auch für andere Plattformen zu verbreiten. Unter anderem gibt es eine freie JDBC-ODBC-Bridge unter den Systemen OS/2, UNIX (auch Linux) und Win32.


Galileo Computing

20.5.8 ODBC einrichten und Access damit verwenden  downtop

Abbildung Die Installation von ODBC sieht bei jedem Datenbankanbieter anders aus. Benutzen wir Microsoft Access, so werden die ODBC-Treiber während der Installation automatisch mit installiert. Wenn wir eine Datenquelle unter ODBC hinzufügen wollen, müssen wir nur wenige Schritte unternehmen. In den Systemeinstellungen (Start, Einstellungen, Systemeinstellungen) suchen wir nach dem Symbol »ODBC-Datenquellen (32 Bit)«, unter Windows 2000 im zusätzlichen Verzeichnis »Verwaltung«. Nach dem Aktivieren öffnet sich ein Dialog mit dem Titel »ODBC-Datenquellen-Administrator«.

Wir gehen auf »Hinzufügen«, um eine neue Benutzer-Datenquelle hinzuzufügen. Im Dialog mit dem Titel »Neue Datenquelle erstellen« wählen wir den Microsoft Access-Treiber aus und gehen auf »Fertigstellen«. Ein Dialog öffnet sich und wir tragen unter »Datenquellenname« einen Namen für die Datenquelle ein. Darunter können wir später in Java die Datenbank ansprechen. Der Name der Datei hat nichts mit dem Namen der Datenquelle gemeinsam. Optional können wir noch eine Beschreibung hinzufügen. Wichtig ist nun die Verbindung zur physikalischen Datenbank. Im umrandeten Bereich »Datenbank« aktivieren wir über die Schaltfläche »Auswählen« einen Datei-Selektor. Hier hangeln wir uns bis zur in Access erstellten Datei durch und tragen sie ein. Nun nur noch ein paar Mal »OK« drücken und wir sind fertig. Wenn der Administrator nicht meckert, können wir nun ein JDBC-Programm starten.

Abbildung 20.1   Auswählen einer Datenbank
Abbildung

Die Geschwindigkeit der JDBC-ODBC-Brücke

Die Geschwindigkeit des Zugriffs über die JDBC-ODBC-Brücke hängt von vielen Faktoren ab, sodass eine pauschale Antwort nicht zu geben ist. Denn zwischen der Abfrage unter JDBC bis zur Datenbank hängen viele Schichten, bei denen unter anderem zahlreiche Hersteller beteiligt sind:

gp  Der JDBC-Treiber-Manager von JavaSoft
gp  Der Treiber der JDBC-ODBC-Bridge von JavaSoft und Intersolv
gp  Der ODBC-Treiber-Manager von Microsoft
gp  Der ODBC-Treiber zum Beispiel vom Datenbankhersteller
gp  Die Datenbank selbst

Jede der Schichten übersetzt nun die Anfragen an die Datenbank in möglicherweise völlig andere Anfragen. So muss zwischen JDBC und ODBC eine Übersetzung vorgenommen werden, dann muss das SQL-Kommando geparst werden und so weiter. Danach geht der Weg auch wieder zurück, von der Datenbank über die Treiber bis hin zum Java-Code. Dies dauert natürlich seine Zeit. Zusätzlich kommen zum Zeitaufwand und dem Speicher, den die Konvertierung benötigt, 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.


Galileo Computing

20.5.9 Oracle8i Enterprise Edition  toptop

Einer der bekanntesten Datenbanken stammt von Oracle. Um die Verbreitung weiter zu erhöhen, ist die Firma dazu übergegangen, eine vollwertige Version zum Download oder als CD freizugeben. Wer das Download nicht scheut, der kann unter http://otn.oracle.com/software/products/oracle9i/content.html die Version für Windows, Linux und weitere Unixe herunterladen.






1   Vergleich zwischen InterBase und MS-SQL unter http://www.sphere-data.com/docs/ ib_vs_ss.html.

2   Entwickler können Code modifizieren, ohne die Änderungen wieder als Open Source freigeben zu müssen. Dies verlangt z. B. die Gnu Public Licence (GPL). Eine deutsche Webseite um dieses Thema herum ist etwa http://www.interbase2000.de.





Copyright © Galileo Press GmbH 2003
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 GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de