Java-DB ist ein leichtgewichtiges Datenbank-Managementsystem (DBMS) - und vollständig in Java geschrieben. ZDNet demonstriert, wie eine einfache Datenbankverwaltung mit Java-DB gelingt.
Da Java-DB[1] nur 2 MByte Speicherplatz braucht, macht sie es Programmierern leicht, eine voll funktionsfähige Datenbank direkt in eine Anwendung zu integrieren. Java-DB ist standardbasiert, unterstützt SQL sowie die JDBC-API und lässt sich problemlos in J2EE integrieren. Seit Java 6 liefert Sun Java-DB standardmäßig mit dem JDK aus.
Welche Technologie steckt dahinter?
Apache Derby[2] ist die Kerntechnologie von Java-DB. Die Datenbank-Engine von Derby ist eine voll funktionsfähige, relational eingebettete Datenbank-Engine. JDBC und SQL sind die wichtigsten APIs für Programmierer.
Eine weitere Kernkomponente, die die Java-DB unterstützt, ist der Derby-Netzwerkserver. Der Netzwerkserver erweitert die Reichweite der Derby-Datenbank-Engine durch Bereitstellung traditioneller Client-Server-Funktionalität. Der Netzwerkserver ermöglicht Clients die Verbindung über TCP/IP unter Verwendung des Standard-DRDA-Protokolls. Außerdem kann die Derby-Engine so JDBC, ODBC/CLI, Perl und PHP im Netzwerk unterstützen.
Derby bringt drei nützliche Utilities mit: ij, dblook und sysinfo.
- ij ist ein Tool, mit dem man SQL-Scripts für jede beliebige JDBC-Datenbank ausführen kann.
- dblook heißt ein Schema-Extraktionstool für eine Derby-Datenbank.
- Hinter sysinfo verbirgt sich ein Utility, das die Anzeige von Versionsnummern und Klassenpfad ermöglicht.
Wie funktioniert das Multithreading?
Wenn eine Anwendung mithilfe des Embedded-Derby-JDBC-Treibers auf die Derby-Datenbank zugreift, läuft die Derby-Engine nicht in einem separaten Prozess. Deshalb gibt es auch keine separaten Datenbankprozesse, die gestartet und beendet werden müssen. Stattdessen läuft die Datenbank-Engine innerhalb derselben Java Virtual Machine (JVM) wie die Anwendung selbst. Derby wird also faktisch Bestandteil der Anwendung, so wie jede andere jar-Datei, die die Anwendung benutzt.
Derby unterstützt mehrere Verbindungen zu einer vorhandenen Datenbank. Ein Beispiel für eine eingebettete Anwendung, die simultane Benutzer verwaltet, ist ein Tomcat- oder Geronimo-Anwendungsserver, der Derby integriert. Eine beliebige Zahl von Benutzern kann Webanwendungen ausführen, die über diesen Webserver auf eine Datenbank zugreifen. Dabei darf nur eine JVM diese Datenbank booten ("öffnen"), so dass mehrere Anwendungen, die in unterschiedlichen JVMs ausgeführt werden, nicht auf dieselbe Datenbank zugreifen können.Um das DBMS verwenden zu können, muss man zuerst Java-DB vom Sun-Entwicklernetzwerk herunterladen[3]. Die aktuelle binäre Distribution bringt alles mit, was gebraucht wird, um mit eingebetteten Datenbankanwendungen zu arbeiten.
Ist die Distribution heruntergeladen, enthält die Verzeichnisstruktur von Java-DB die folgenden Unterverzeichnisse: demo, frameworks, javadoc, docs und lib.
- demo schließt zwei Demoprogramme ein: Eines zeigt, wie man eine einfache eingebettete Anwendung erstellt, das andere, wie Java-DB in einer Client-Server-Umgebung eingesetzt wird.
- frameworks umfasst Utilities zum Einrichten von Umgebungsvariablen sowie für das Erstellen von und Arbeiten mit Datenbanken. (Bei dem weiter unten aufgeführten Beispiel wird dieses Unterverzeichnis nicht verwendet, weil diese Anwendung vollständig selbstständig sein soll. Für das Address-Book werden keine externen Utilities eingesetzt.)
- javadoc enthält die API-Dokumentation. Dieses Unterverzeichnis ist besonders nützlich, wenn man seine IDE so einrichtet, dass sie als Java-DB-API-Javadoc direkt darauf zugreifen kann.
- docs besteht aus der Dokumentation zur Einrichtung von Java-DB sowie Administrator- und Referenzleitfäden.
- lib enthält die Java-DB-Bibliotheken, verpackt als jar-Dateien.
Hinweis:Informationen zu den einzelnen Bibliotheken finden sich in der Java-DB-Dokumentation.
Für eine eingebettete Datenbankanwendung wird hier nur die Bibliotheksdatei derby.jar verwendet. Um Java-DB für Entwicklungszwecke zu installieren, muss die Datei derby.jar in den Klassenpfad der Anwendung aufgenommen werden.
Nach der Installation der binären Distribution und dem Hinzufügen von derby.jar zum Klassenpfad lässt sich Java-DB genauso wie jede andere JDBC-kompatible Datenbank verwenden. Falls Java 6 bereits installiert ist, reicht es, die Datei derby.jar einfach dem Standard-Klassenpfad hinzuzufügen. Um mit der Verwendung des DBMS zu beginnen, wird der JDBC-Treiber geladen. Die Treiber für Java-DB sind in der Datei derby.jar enthalten, so dass man nichts zusätzlich herunterladen muss. Um den Treiber zu laden, verweist man auf ihn mit der Methode Class.forName. Der Name des eingebetteten Treibers lautet org.apache.derby.jdbc.EmbeddedDriver. Er lässt sich wie jeder andere JDBC-Treiber laden:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Soll eine Verbindung vom Treibermanager abgerufen werden, übergibt man einfach einen URL-String, der die Datenbank identifiziert, sowie eine Reihe von Eigenschaften, die die Interaktion der Verbindung mit der Datenbank regeln. Meistens werden diese Eigenschaften dazu verwendet, einer Verbindung einen Benutzernamen sowie ein Passwort zuzuordnen. Der URL-Bestandteil dbName identifiziert eine bestimmte Datenbank. Eine Datenbank kann sich an vielen Stellen befinden: zum Beispiel im aktuellen Arbeitsverzeichnis, in einer jar-Datei, in einem speziellen Heimatverzeichnis der Java-DB-Datenbank, in einem separaten Speicherort des Dateisystems oder im Klassenpfad.
Die einfachste Möglichkeit, den Speicherort der Datenbank in einer eingebetteten Umgebung zu verwalten, besteht darin, die Systemeigenschaft derby.system.home festzulegen. Diese Eigenschaft verrät Java-DB das standardmäßige Heimatverzeichnis aller Datenbanken. Die optionale propertyList ist eine Liste von Eigenschaften, die man dem Datenbanksystem übergeben kann. Eigenschaften lassen sich dem Java-DB-System entweder über die URL oder als separates Eigenschaften-Objekt übergeben. Wenn Eigenschaften Bestandteil der URL sind, sollte ein Semikolon (;) jeder Eigenschaft vorausgehen. Hier die am häufigsten verwendeten Eigenschaften:
create=true databaseName=nameOfDatabase user=userName password=userPassword shutdown=true
Sobald die Anwendung festgestellt hat, wo sich alle Datenbanken befinden, kann man eine Datenbankverbindung abrufen:
Auf diese Weise lässt sich also diese kompakte Datenbank nutzen, die direkt in die Anwendung eingebunden ist.
URLs in diesem Artikel:
[1] = http:/
[2] = http:/
[3] = http:/