Prof. Dr. Stefan Böttcher Sven Groppe Christian Wagner Übungen zur Vorlesung Datenbanken und Informationssysteme I WS 2002/2003 Übung 4 - JDBC/SQLJ Vorbereitung auf die JDBC/SQLJ Datenbankübungen Um die Oracle-Übungen durchzuführen, benötigt Sie einen Account auf der Datenbank, den Sie über eine kostenlose und unverbindliche Registrierung auf der Webseite: http://131.234.48.168/ erhalten. Hinweis: Die Nutzung der Oracledatenbank ist hierbei nur zu Zwecken des Lehr- & Übungsbetriebes erlaubt!!! 1. Laden Sie sich das Zipfile (http://131.234.48.168/_download/jdbcdb.zip) auf Ihren PC 2. Wegen der Quota-Beschränkungen an den Windows PCs empfehlen wir Ihnen das Zipfile "jdbcdb.zip" in Ihr temporäres Verzeichnis unter C:\Dokumente und Einstellungen\{Eure Benutzerkennung}\Lokale Einstellungen\Temp zu kopieren und dieses auch hier zu entpacken (z.b. mit dem Programm Powerarchiver) Anschliessend solltet Ihr unter...\temp die folgende Verzeichnisstruktur vorfinden:...temp\ -> jdbcdb\ ->config\ ->dbvis30\ ->runconfig.bat ->sqlj 3. Zur einmaligen Anpassung aller Konfigurationsdateien ist unter MSDOS die Ausführung einer BAT-Datei "runconfig.bat" erforderlich. Dazu öffnen Sie eine MSDOS-Shell und wechseln mittels c: cd %TEMP%\jdbcdb in Ihr temporäres Verzeichnis C:\Dokumente und Einstellungen\{Eure Benutzerkennung}\Lokale Einstellungen\Temp\jdbcdb
Anschließend rufen Sie die Batch-Datei auf: Aufruf:.\runConfig.bat Mögliches Problem: java-interpreter kann nicht gefunden werden Lösung: In den 2 Dateien... jdbcdb\config\config.properties jdbcdb\runconfig.bat muss die Variable "JAVA_HOME", bzw. der Pfad zum Java-Interpreter richtig gesetzt werden. (Default: JAVA_HOME=C:\jdk1.3.1_04 ) 4. DBVisualizer-Profil ins Heimverzeichnis kopieren Kopieren Sie sich anschliessend das vorkonfigurierte DBVisualizer-Profil unter "jdbcdb\dbvis30\uni-konfiguration\dbvis.xml" in Ihr Heimverzeichnis unter C:\Dokumente und Einstellungen\{Eure Benutzerkennung}\dbvis.xml Hinweis für die JDBC/SQLJ Datenbankübungen 5. Zum Setzen der Umgebungsvariablen und Ausführen aller Java-Programme dieser Übung öffnen Sie zuerst eine DOS-Shell, gehen Sie in das Verzeichnis jdbcdb\sqlj\ mittels c: cd %TEMP%\jdbcdb\sqlj und führen Sie die Datei aus. SETENV.BAT Um zu überprüfen, ob alles richtig konfiguriert worden ist, sollten Sie aus Ihrem aktuellen Verzeichnis das Programm "sqlj" in Ihrer MSDOS-Shell aufrufen können.
Aufgabe 1 (JDBC/ACCESS - Datenbestände aufbauen und abfragen) In den ersten beiden Aufgaben wird eine ACCESS-Datenbank mittels JDBC angesprochen. Alle beschriebenen Programme zu JDBC dieser und der nächsten Aufgabe finden Sie in dem Verzeichnis jdbcdb\sqlj\ub-jdbc innerhalb des auspackten Archivs. Um mittels ODBC auf eine Access-Datenbank zugreifen zu können, muss diese unter ODBC angemeldet werden. Dazu gehen Sie auf den Start-Button, anschließend Systemsteuerung, Leistung und Wartung, Verwaltung und schließlich Datenquellen (ODBC). Unter der Karteikarte Benutzer-DSN klicken Sie auf Hinzufügen. Dort wählen Sie per Doppelklick den Microsoft-Access-Treiber aus. Unter Datenquellennamen geben Sie bitte den in den Beispielprogrammen verwendeten Namen odbc2access ein und klicken auf Erstellen. Wählen Sie ein Verzeichnis und geben einen Namen für die Access-Datenbank ein, zum Beispiel dbtest.mdb. Klicken Sie in allen offenen Dialogfenstern auf O.k. a) Übersetzen und starten Sie erst dbinit.java mittels und javac dbinit.java java dbinit und dann analog für dbselect.java, um zu sehen, wie die Datenbank initialisiert wird. b) Ergänzen Sie zwei stmt.executeupdate - Befehle in dbinit.java, nämlich für folgende Informationen: "Dell liefert auch noch einen pc400 für 1800 in 2 Tagen" und "Reich gibt auch noch einen pc500 in Auftrag". Übersetzen und starten Sie dbinit.java erneut, und starten Sie dann dbselect.class, um sich die Änderungen anzusehen. c) Programmieren Sie in der Datei dbselect.java die Queries: "Wer liefert (mindestens) ein Teil, das Reich bestellt hat?" "Wer liefert alle Teile, die Reich bestellt hat in maximal 4 Tagen?" und lassen Sie das Ergebnis via JDBC von Java ausgeben. Ändern Sie ggf. Ihren Datenbestand, um die Korrektheit Ihrer Programme zu testen. Aufgabe 2 (JDBC/ACCESS - Metadaten einer Datenbank einlesen und ausgeben): Das Programm dbinf.java gibt die Tabellen einer Datenbank aus, dbtab.java gibt die Tabelle "Auftrag" aus. Dazu lesen beide Programme die Metadaten einer Datenbank aus.
Implementieren Sie nun ausgehend von diesen beiden Programmen ein Programm, welches den Datenbestand aller Tabellen der Datenbank ausgibt. Aufgabe 3 (SQLJ/ORACLE - Datenbestand aufbauen/hostvariablen): Im folgenden werden wir die Oracle-Datenbank ansprechen. Die beschriebenen Programme dieser und der nächsten Aufgabe finden Sie in dem Verzeichnis jdbcdb\sqlj. Für die SQLJ-Aufgaben müssen in der Datei "jdbcdb\sqlj\ub-sqlj\connect.properties" die Variablen sqlj.user und sqlj.password um Ihre eigene (Oracle)Datenbankkennung (fängt mit "fs_" an) und dem dazugehörigen Password angepasst werden. a) Übersetzen Sie das Programm zur Datenbank-Initialisierung mit sqlj dbinit.sqlj ohne Online-Prüfung oder besser mit sqlj -user user/password -url 131.234.48.168:1521:oradb01 dbinit.sqlj Dies ermöglicht eine Online-Prüfung der SQL-Statements schon zur Kompilierzeit. Schauen Sie sich auch den von dem SQLJ-Translator erzeugten Java-Code in der Datei dbinit.java (sowie der weiteren übersetzten Programme) an. Das Programm kann dann mit java dbinit aufgerufen werden. b) Die Datei dbhost.sqlj enthält einen Programmrumpf. In diesen Programmrumpf tragen Sie den entsprechenden Code ein, um mittels Hostvariable(n) folgende Anfrage auszugeben: - "Welche Beschreibung hat das Teil 'pc586' in der Relation 'Teil'?" - "Welchen (eindeutigen) Preis, welche (eindeutige) Lieferzeit und welche (eindeutige) Beschreibung besitzt das Teil 'pc486' von 'Escom'?" Produzieren Sie auch ebenfalls absichtlich Fehler (z.b. durch Angabe von Hostvariablen mit falschen Typen) innerhalb der SQL-Statements und verifizieren Sie damit die Online-Prüfung. Auch hier müssen Sie vorher mit "sqlj" eine Vorübersetzung starten... sqlj -user user/password -url 131.234.48.168:1521:oradb01 dbhost.sqlj
und anschliessend die Javaklasse "dbhost" über......aufrufen. java dbhost Aufgabe 4 (SQLJ/Oracle - Benannte/Positions- Iteratoren) Für diese Aufgabe haben wir Euch bereits entsprechende Programmrümpfe im Verzeichnis jdbcdb\sqlj\db-sqlj\ bereitgestellt. Stellen Sie folgende Anfragen mittels SQLJ: "Wer liefert alles einen 'pc486'?" "Welcher Lieferant liefert den günstigsten 'pc486'?" Verwenden Sie dazu a)die Positionsiteratoren, (siehe: dbiteratorposition.sqlj ) b)die benannten Iteratoren (siehe: dbiteratornamed.sqlj ) um die Ergebnismenge zu durchlaufen und auszugeben. Aufgabe 5 (DBVisualizer/Oracle - Bedienung eines Datenbank-Clients) Der DBVisualizer ist ein für nicht-kommerzielle Zwecke frei erhältliches Client-Programm für Datenbanksysteme, das im Folgenden stellvertretend für viele andere Client-Programme vorgestellt wird. Mit diesem Programm lassen sich Informationen über jede Java-JDBC fähige Datenbank anzeigen sowie SQL-Statements direkt ausführen. Weitere Informationen, eine kurze bebilderte "Bedienungsanleitung", sowie unser herunterladbares Archiv mit DBVisualizer & den SQLJ-Tools findet Ihr auf der Webseite: http://131.234.48.168/dbvis.m Mit dem Programm "DBVisualizer" kann man u.a. innerhalb des SQL-Commanders SQL- Befehle an die Datenbank senden, sowie deren Ausgabe darstellen. Sie finden das Programm unter: "jdbcdb\dbvis30\dbvis.exe" Aufgabe: Stellen Sie folgende Anfrage an die Datenbank: "Welcher Lieferant liefert am günstigsten alle Teile von 'Meier'?"