48
Universit¨ at Hannover Fachgebiet Datenbanksysteme Institut f¨ ur Informationssysteme Fachbereich Informatik Studienarbeit im Studiengang Mathematik mit Studienrichtung Informatik bei Prof. Dr. Lipeck Betreuer: Sascha Klopp Implementierung einer graphischen Benutzerschnittstelle f ¨ ur SQL-Anfragen an eine Datenbank als Java-Applet 10. Oktober 2003 Mathis Dirksen-Thedens Matr.-Nr. 2037068

Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

Universitat HannoverFachgebiet Datenbanksysteme

Institut fur InformationssystemeFachbereich Informatik

Studienarbeitim Studiengang Mathematik mit Studienrichtung Informatik

bei Prof. Dr. Lipeck

Betreuer: Sascha Klopp

Implementierung einer graphischenBenutzerschnittstelle fur SQL-Anfragen

an eine Datenbank als Java-Applet

10. Oktober 2003

Mathis Dirksen-ThedensMatr.-Nr. 2037068

Page 2: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

INHALTSVERZEICHNIS 1

Inhaltsverzeichnis

1 Einleitung 21.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Uberblick uber diese Arbeit . . . . . . . . . . . . . . . . . . . . . 31.3 Anwendungsszenario . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Vorbereitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Anforderungen 52.1 Funktionalitat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 GUI-Design und Intuitivitat . . . . . . . . . . . . . . . . . . . . . 6

3 Realisierung 83.1 Prinzip eines Applets . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Prinzip von SQuiggLe . . . . . . . . . . . . . . . . . . . . . . . . 83.3 Der DESCRIBE Befehl . . . . . . . . . . . . . . . . . . . . . . . . 103.4 Der EXPLAIN PLAN Befehl . . . . . . . . . . . . . . . . . . . . . 103.5 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.6 Installation des Applets auf einem Server . . . . . . . . . . . . . . 133.7 Weitere Anwendungsmoglichkeiten fur RMI-JDBC . . . . . . . . . 15

4 Benutzerhandbuch 164.1 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.2 Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.3 Benutzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.4 Beschrankungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.5 Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5 Quellenverzeichnis 23

6 JavaDoc Dokumentation 25

Page 3: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

2

Kapitel 1

Einleitung

1.1 Aufgabenstellung

Meine Aufgabe bestand darin, ein Java-Applet zu erstellen, mit dem SQL-Anfra-gen an eine Datenbank (z. B. Oracle 9i) gestellt werden konnen. Das Applet Dato[vH98], welches eine ahnliche Funktionalitat wie die gewunschte besitzt, existierteschon, diente aber nicht als Vorlage, weil mir die Struktur zu umstandlich er-schien und das Tool zur Darstellung das veraltete Abstract Window Toolkit [awt]benutzt. Die Frage, wie die graphische Benutzerschnittstelle zu gestalten ist, warein Hauptthema, denn jeder Benutzer soll moglichst ohne Einarbeitungszeit oderlanges Lesen eines Manuals sofort das Applet benutzen konnen. Auch war wichtig,dass die Benutzer des Applets den explain plan Befehl so nutzen konnen,dass sie eine Baumstruktur angezeigt bekommen, und dass der describe Befehlfunktioniert. Es wurde angenommen, dass die primaren Benutzer die Teilnehmerder Ubung zum SQL-Kurs der Fachgruppe Datenbanksysteme sein wurden.

Besondere Aufmerksamkeit galt auch der Frage, wie man die Datenbankver-bindung des Applets so einrichten kann, dass der Endbenutzer keine Eigenschaf-ten seiner Java-Laufzeitumgebung umstellen muss – das war bisher notig, denndie Java-Standardeinstellungen erlauben einem Applet lediglich eine Verbindungzu dem Server, von dem es stammt; der Datenbankserver ist allerdings nichtimmer gleich dem Webserver.

Ich habe das zu schreibende Applet “SQuiggLe ” genannt, in Anlehnung anengl. to squiggle, zu deutsch verschnorkeln, da es im Gegensatz zu SQL*Plus dochum einiges schoner aussieht und die Bedienung insofern einfacher und komforta-bler ist, als dass SQuiggLe eine Befehlszeilen-History bietet (was bei SQL*Plusbis heute rudimentar blieb).

Außerdem musste die Studienarbeit in LATEX [Lam94] [GMS95] gesetzt wer-den.

Page 4: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

1.2. UBERBLICK UBER DIESE ARBEIT 3

1.2 Uberblick uber diese Arbeit

Im restlichen Kapitel 1 werden die vorbereitenden Arbeiten und Grundlagen be-schrieben, im Kapitel 2 die konkreten Vorbereitungen darauf, SQuiggLe in Javazu realisieren. Die Implementierungsphase ist in Kapitel 3 dokumentiert, undin Kapitel 4 ist das Benutzerhandbuch, das man auch separat an Benutzer vonSQuiggLe weitergeben kann. Schließlich sind noch die Quellen angegeben und dieJavaDoc-Dokumentation eingefugt worden.

1.3 Anwendungsszenario

Die Rollen der Rechner sind momentan folgendermaßen verteilt (Ausgangslage,nur die maßgeblichen Daten):

leo.dbs.uni-hannover.de Webserver und Datenbankserver fur eine In-stanz von Oracle (Production)

herkules.dbs.uni-hannover.de Datenbankserver fur eine weitere Instanz vonOracle (Development)

cip-s.kbs.uni-hannover.de Oracle-Datenbankserver fur den SQL-Kurs

Dabei ist die Instanz auf CIP-S diejenige, die von den primaren Benutzernwahrscheinlich am haufigsten genutzt werden wird.

1.4 Vorbereitungen

Zuerst wurde eine Materialsammlung im Internet gemacht. Dabei hat sich gezeigt,dass der RMI-JDBC-Treiber (mit seiner zugehorigen Serverapplikation) [rmib]sich fur die Verwendung am Institut geradezu anbot – damit ist es moglich, dieVerbindungen zu allen Datenbanken uber Leo als RMI-Server [rmia] laufen zulassen. Somit ware das Problem, dass bisher jeder Benutzer die Einstellungenseiner Java-Laufzeitumgebung anpassen musste, erledigt, denn ein Applet darfnach den Standardeinstellungen Verbindungen zu dem Server herstellen, von demes geladen wurde, und zwar auch zu einem anderen Port als zu dem, von dem esgeladen wurde.

Dann stellte sich naturlich die Frage, welche Befehle uber die von gangigenDatenbank-Management-Systemen implementierte Untermenge des SQL-Befehls-satzes nach ISO 9075 (siehe [II99a], [II99b], [II99c], [II99d], [II99e] fur mehr In-formationen zu diesem Standard) hinaus unterstutzt werden sollten. Abhangigvom Datenbank Management System (DBMS) sind uber JDBC [Ree97] einigeherstellerspezifische Befehle verfugbar, aber z. B. der describe-Befehl ist nichtim Oracle-Server, sondern nur in SQL*Plus verfugbar. Dieser Befehl sollte auf

Page 5: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

1.4. VORBEREITUNGEN 4

jeden Fall nachgebildet werden, wobei erst einmal geklart werden musste, was ereigentlich fur die verschiedenen Datenbank-Objekte zuruckgibt. [Ora99]

Page 6: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

5

Kapitel 2

Anforderungen

2.1 Funktionalitat

Die geforderten Funktionen des Applets sind:

� Es soll eine moglichst große Untermenge des Standards SQL99 unterstutzen(siehe [II99a]ff). Wie groß diese Menge uberhaupt sein kann, hangt auchvom verwendeten DBMS ab.

� Es soll leicht bedienbar sein.

� Es soll das Oracle-Paket DBMS OUTPUT unterstutzen und außerdem dendescribe-Befehl verstehen.

� Es soll das Ergebnis eines explain plan Befehles als Baum anzeigenkonnen.

� Es soll allgemein Ergebnisse tabellarisch formatiert anzeigen konnen.

Das Applet wird in naher Zukunft nur innerhalb des FG Datenbanksystemebenutzt, darum wurden bisher nur zwei Treiber in die RMI-JDBC-Anwendungauf Leo eingebunden, und zwar der Oracle-Thin-Driver und der MySQL-Driver.Siehe dazu auch 3.5.

Page 7: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

2.2. ARCHITEKTUR 6

2.2 Architektur

Der bisherige Aufbau bzw. die Hierar-chie sah folgendermaßen aus:

Es wird durch das Einbauen des RMI-JDBC-Treibers eine weitere Abstrakti-onsebene eingezogen, sodass der Auf-bau nachher so aussieht:

Bei dem neuen Aufbau wird RMI-JDBC vom Applet als JDBC-Treiber ver-wendet; dieser baut dann eine Verbindung zur RMI-Serveranwendung auf. RMI(Remote Method Invocation) bildet die Klassen der Serverapplikation uber dasNetzwerk fur das Applet nach, sodass dieses nicht einmal merkt, dass die Instan-zen der Klassen, mit denen es arbeitet, nicht auf demselben Rechner liegen.

2.3 GUI-Design und Intuitivitat

Die graphische Benutzeroberflache (GUI) muss so beschaffen sein, dass es eineklare Benutzerfuhrung gibt. Unubersichtlichkeit sollte vermieden werden, dafur

Page 8: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

2.3. GUI-DESIGN UND INTUITIVITAT 7

lieber einige unwichtigere Funktionen weglassen. Man sollte auf den ersten Blicksehen, worum es bei dem Programm geht, und dazu gehort bei SQuiggLe beson-ders die Trennung von Eingabe- und Ausgabebereich.

Echte Intuitivitat bedeutet, dass ein Programm eine sinnvolle Benut-zerfuhrung aufweist. Ohne großeres Nachdenken ist jedem Benutzer unmittelbarklar, welches Element der GUI wofur zustandig ist. Auch wenn ein Benutzer dasProgramm zum ersten Mal benutzt (und in etwa weiß, wofur es gut ist), kann eres sofort benutzen.

Diese Anforderungen sind ziemlich hoch gesteckte Ziele, aber das Resultatrechtfertigt den Aufwand. Ein Anwender ist sehr viel zufriedener, wenn er nichterst seitenweise Dokumentation lesen muss, um ein Programm zu bedienen!

Page 9: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

8

Kapitel 3

Realisierung

3.1 Prinzip eines Applets

Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-Bytecode-Interpreter java ausgefuhrt werden, sondern uber ein Plug-In, welchesin einen Web-Browser integriert ist. Außerdem gibt es im Java 2 Software De-velopment Kit (auch J2SDK oder JDK genannt) einen appletviewer, der zumTesten von Applets gedacht ist. Fur ausfuhliche Informationen und Anleitungensiehe [app].

3.2 Prinzip von SQuiggLe

SQuiggLe (das Applet) offnet standardmaßig eine GUI fur Benutzereingaben.Mit den im Applet enthaltenen Buttons kann man neue GUIs offnen (z. B. furdie Kommunikation mit anderen Datenbanken) und auch alle GUIs schließen. ImSchließvorgang enthalten ist, dass jede noch offene Verbindung zur Datenbankordnungsgemaß geschlossen wird, genau wie es auch passiert, wenn man eineGUI einzeln schließt.

Im Folgenden gelte die Bezeichnung SQuiggLe fur eine einzelne GUI, nichtmehr fur das Applet als Ganzes.

SQuiggLe handelt nach den Eingaben des Benutzers, die sinnvollerweise infolgender Reihenfolge kommen:

� (Login bei der Datenbank)

� SQL-Anfrage (falls der Benutzer noch nicht eingeloggt ist, wird automatischdavor ein Login durchgefuhrt)

� SQL-Anfrage

� . . .

Page 10: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.2. PRINZIP VON SQUIGGLE 9

Jede SQL-Anfrage liefert ein Ergebnis, welches in einem besonderen Bereichangezeigt wird, zusammen mit der Anfrage, die dieses Ergebnis hervorgerufenhat. Der Benutzer hat die Moglichkeit, bei einem aus einer Tabelle bestehendenErgebniss eine alternative Nur-Text-Fassung aufzurufen. Diese kann z. B. ineine Mail kopiert werden. Ebenso kann, falls die Anfrage dies ausgelost hat, derText angeschaut werden, der vom Oracle-Package DBMS OUTPUT ausgegebenwurde.Hier ein Beispiel:

Man kann einzelne Anfragen bzw. deren Tabs auch uber ein Kontextmenu wie-der loschen. Das macht naturlich die Auswirkungen auf die Datenbank nichtruckgangig! Alles bleibt erhalten, falls Auto-Commit eingeschaltet ist, oder al-les wird dauerhaft gemacht beim nachsten manuellen Commit. Wenn SQuiggLebeendet wird, ohne dass ein Commit ausgefuhrt wurde und Auto-Commit ausge-schaltet war, wird beim Beenden automatisch ein Commit ausgefuhrt.

Wahrend einzelne Anfragen ausgefuhrt werden, kann der Benutzer das Einle-sen von Ergebnisdatensatzen abbrechen. Am unteren Fensterrand wird die Num-mer des Datensatzes angezeigt, der gerade eingelesen wird, und ein “Anfrageabbrechen”-Button.

Page 11: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.3. DER DESCRIBE BEFEHL 10

3.3 Der DESCRIBE Befehl

Fur die Realisierung dieses Befehls musste, wie in 1.4 erwahnt, geklart bzw.festgelegt werden, was fur die einzelnen Objekte als wichtige Daten angesehenwird. In dieser Frage waren die “Catalog Views / Data Dictionary Views” ausder Oracle Dokumentation maßgeblich. Fur jeden Objekttyp <NAME>, der un-terstutzt werden sollte, wurden aus dem View ALL <NAME>S die jeweils wich-tigen Felder herausgesucht.

Eine describe <objectname> Anfrage wird innerhalb von SQuiggLe fol-gendermaßen verarbeitet:

1. Es wird eine Anfrage an die Datenbank gesendet, von welchem Typ das zubeschreibende Objekt ist. Dazu wird ALL USER OBJECTS und ALL OB-JECTS verwendet.

2. Zu jedem Objekttyp gibt es einen eigenen View. Dieser wird angefragt, umdie passenden Daten zu erhalten.

3. Im Server-Output wird der Objekttyp ausgegeben. Das ist wichtig, wenndie Auflosung von Synonymen in der Klasse dbis.squiggle.GUI aktiviertist, denn sonst merkt man nicht, dass man nur mit einem Synonym arbeitet!Standardmaßig ist die Synonymauflosung aktiviert.

4. Das Anfrageergebnis wird als Tabelle und als Nur-Text-Fassung dargestellt.

3.4 Der EXPLAIN PLAN Befehl

Diesen Befehl gibt es z. B. in Oracle und in PostgreSQL. Der explain plan Be-fehl hat die Funktion, den Anfrageplan, den die Datenbank zur Ausfuhrung einerbestimmten Anfrage benutzen wurde, in eine (entsprechend formatierte) Tabellezu schreiben. Standardeinstellung in Oracle ist hierfur die Tabelle plan table;allerdings wird nur hinzugefugt, das heißt, alle alten Anfrageplane, die nicht ex-plizit geloscht wurde, sind auch noch in dieser Tabelle enthalten.

Dieser Befehl erzeugt keine Ausgabe, also keine Tabelle aus Ruckgabewert,sondern schreibt lediglich den Plan in die dafur vorgesehene Tabelle. Dabei gibt esdie Spalten “ID” und “PARENT ID”, die eine Struktur definieren. Diese Strukturkann man z. B. mit der folgenden Anfrage etwas schoner als in reiner Tabellenformdarstellen:

select

substr (lpad(’ ’, level-1) || operation || ’ (’ || options ||

’)’,1,30 ) "Operation", object_name "Object"

from

plan_table

Page 12: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.4. DER EXPLAIN PLAN BEFEHL 11

start with id = 0

connect by prior id=parent_id;

Diese Methode ist aber immer noch nicht ausreichend. Um die Benutzungvon explain plan einfach und graphisch ansprechend zu machen, wird der Be-fehl von SQuiggLe intern umgewandelt in mehrere Befehle: zuerst werden alteErgebnisse geloscht, dann wird der eigentliche Befehl ausgefuhrt, und dann wirddas Ergebnis aus plan table gelesen. Ansonsten wurde der Befehl keine Ta-belle zuruckgeben, und es wurde das Ergebnis erst nach einer weiteren Anfrageausgegeben werden.

SQuiggLe wandelt die empfangenen Tabellenzeilen um in eine Baumstruk-tur, damit der Benutzer leicht sehen kann, wie die Anfrage abgearbeitet werdenwurde. Diese Funktionalitat war in Dato grundsatzlich schon vorhanden, aberin SQuiggLe kann man auch Zusatzinformationen wie Kosten, Optimierung usw.durch Klicken auf die jeweiligen Knoten des generierten Baumes anzeigen lassen.

Fur diesen Befehl muss die Tabelle plan table bereits existieren. Sie wird,falls sie noch nicht existiert, beim Datenbanklogin automatisch versucht anzule-gen. Dabei wird eine evtl. vorhandene plan table vorher geloscht, falls sie nichtdie erforderliche Spaltenzahl und die richtigen Spalten-Datentypen hat.

Ein Beispiel: Falls es in Oracle die Tabellen dept und emp gibt und sie mitden Anweisungen

CREATE TABLE DEPT (

DEPTNO NUMBER(2) NOT NULL,

DNAME VARCHAR2(14),

LOC VARCHAR2(13),

CONSTRAINT DEPT_PRIMARY_KEY PRIMARY KEY (DEPTNO))

und

CREATE TABLE EMP (

EMPNO NUMBER(4) NOT NULL,

ENAME VARCHAR2(10),

JOB VARCHAR2(9),

MGR NUMBER(4) CONSTRAINT EMP_MGR_FK REFERENCES

EMP (EMPNO),

HIREDATE DATE,

SAL NUMBER(7,2),

COMM NUMBER(7,2),

DEPTNO NUMBER(2) NOT NULL,

CONSTRAINT EMP_DEPTNO_FK FOREIGN KEY (DEPTNO) REFERENCES

DEPT (DEPTNO),

CONSTRAINT EMP_EMPNO_PK PRIMARY KEY (EMPNO))

Page 13: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.5. TESTS 12

erstellt wurden, gibt die Anfrageexplain plan for select deptno, sum(sal) salarysum from empnatural join dept group by deptnofolgendes graphisch strukturierte Ergebnis aus:

In SQuiggLe kann man, wie oben erwahnt, durch einen Klick Informationenuber die einzelnen Knoten des Baums abrufen.

3.5 Tests

SQuiggLe wurde mit den Browsern Internet Explorer 6.0 (Windows), Mozilla 1.3und 1.4 (Windows und Linux), Opera 7.11 (Linux) und Netscape 6.2 (Linux)erfolgreich getestet. Dabei kamen die JREs 1.3 und 1.4 zum Einsatz.

Auf der Serverseite wurde SQuiggLe mit RMI-JDBC 2.5, Oracle 9.2 und My-SQL 4.0 getestet. Dabei wurde die Zusammenarbeit von RMI-JDBC mit denbeiden Datenbanken ebenso wie die jeder Datenbank einzeln mit SQuiggLe ge-pruft.

Zur Performance muss man leider sagen, dass SQuiggLe große Datenmengennicht in akzeptabler Zeit darstellen bzw. uber das Netzwerk transportieren kann.Folgende Kombinationen wurden innerhalb des Instituts-Netzwerkes unter Mo-zilla 1.4 (mit dem Plug-In des JRE 1.4) ausprobiert mit der Anfrage selecttitle, year from moviedb.movie where title like ’%res’ (gibt 982 Zei-len zuruck):

Page 14: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.6. INSTALLATION DES APPLETS AUF EINEM SERVER 13

Umgebung alle Datensatze angezeigt nachSQL*Plus: 2 SekundenSQuiggLe mit Oracle-Thin-Treiber: 35 SekundenSQuiggLe mit RMI-JDBC-Treiber: 40 SekundenDato mit Oracle-Thin-Treiber: mehr als 1 Minute

3.6 Installation des Applets auf einem Server

Das Programmmpaket besteht aus:

1. Java-Quelltext-Dateien:

� dbis/squiggle/AnswerPanel.java

� dbis/squiggle/DBMS OUTPTUT.java

� dbis/squiggle/GUI.java

� dbis/squiggle/HelpViewer.java

� dbis/squiggle/Node.java

� dbis/squiggle/ServerOutputArea.java

� dbis/squiggle/SquiggleApplet.java

� dbis/squiggle/TreePane.java

� dbis/squiggle/TreeView.java

� dbis/sql/JLoginDialog.java

� dbis/sql/TnsLoader.java

� dbis/util/PropertyDisplayApplet.java

� dbis/util/RBLoad.java

2. Makefile

3. README

4. API-Dokumentation (Verzeichnis api/)

5. LATEX-Sourcen der Arbeit (Verzeichnis tex/)

6. WWW-Verzeichnis:

� HTML-Dateien:

– index.html

– jdk13.html

– jdk13-thin.html

Page 15: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.6. INSTALLATION DES APPLETS AUF EINEM SERVER 14

– jdk14.html

– jdk14-thin.html

– alles.html

� Java-Archive:

– squiggle.jar

– RmiJdbc.jar

– thin-jdk1.1.zip

– mysql-connector.jar

– jcert.jar

– jnet.jar

– jsse.jar

� Online-Hilfe-Dateien (Verzeichnis help/)

� Ressourcen (Verzeichnis res/)

Das Paket ist in sich abgeschlossen und muss lediglich an einen Ort kopiert wer-den, von dem aus ein Webserver es zur Verfugung stellen kann.

Falls das Applet lauffahig sein soll, ohne dass jeder Benutzer sein Java Run-time Environment anpassen muss, sollte die RMI-JDBC-Serverapplikation aufdemselben Rechner laufen, auf dem der Webserver lauft; außerdem muss derRMI-JDBC-Rechner bzw. Webserver in die von dbis.sql.JLoginDialogNew be-nutzte Properties-Datei eingetragen werden.

Da das Applet SQuiggLe fur das FG DBS erstellt wurde, ist in der Klas-se dbis.sql.JLoginDialogNew (in den Variablen RBDir und RBFile) der Ortder Properties-Datei fest verankert, von dem Treibereinstellungen geladen wer-den. Wenn dieser Ort geandert werden soll, muss die Klasse JLoginDialogNew

neu kompiliert werden (ein Makefile liegt dem Programmpaket bei, dieses mussgegebenenfalls angepasst werden).

Bei einer Neuinstallation mussen folgende Dateien angepasst werden (ausge-hend vom abgegebenen Paket):

� www/help/index.html (der Tag <BASE> muss angepasst werden)

� dbis/squiggle/GUI.java (die Variable rootPath muss angepasst werden; an-sonsten wird der weiße Pfeil in der GUI nicht angezeigt, sondern stattdesennur ein Text)

Wenn neue Treiber hinzugefugt werden sollen, so muss dies sowohl in derProperties-Datei als auch in der HTML-Datei getan werden, von der das AppletSQuiggLe gestartet wird. Dabei muss der Ort bekannt sein, von dem die JAR-Datei geladen werden kann, die den neuen Treiber enthalt.

Page 16: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

3.7. WEITERE ANWENDUNGSMOGLICHKEITEN FUR RMI-JDBC 15

3.7 Weitere Anwendungsmoglichkeiten fur

RMI-JDBC

Aufgrund des erstaunlich geringen Ladezeit-Unterschiedes zwischen Oracle-Thin-und RMI-JDBC-Treiber ist es nicht so abwegig, andere Applikationen und App-lets wie z. B. GISVisual auch mit dem RMI-JDBC-Treiber laufen zu lassen. Dieeinzige Hurde dabei ist, dass einige Klassen, die vom Oracle-Thin-Treiber stan-dardmaßig benutzt werden, um bestimmte Datenbankobjekte in Java zu kapseln,nicht serialisierbar sind, was allerdings fur RMI Voraussetzung ist [rmib].

Dies Problem konnte man dadurch vermeiden, dass man die RMI-JDBC-Serverapplikation, die auf Leo lauft, so anpasst, dass andere (serialisierbare)Klassen verwendet werden. Das ist mit der im Interface java.sql.Connection

definierten Methode setTypeMap(java.util.Map) moglich.Bei Bedarf kann auch SSL fur die Datenubertragung aktiviert werden, RMI-

JDBC unterstutzt diesen Standard.

Page 17: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

16

Kapitel 4

Benutzerhandbuch

4.1 Voraussetzungen

Da das Programm SQuiggLe ein Applet ist, braucht man nur einen Browser, derJava 1.3.0 oder hoher versteht. Außerdem ist eine schnelle Internetverbindungnicht schlecht, da fur das Applet 660 kB bis 2,3 MB geladen werden mussen,abhangig von der Java-Version und auch abhangig davon, ob man nur mit RMI-JDBC (ausreichend fur fast alle Anwendungen), mit dem Oracle-Thin-Treiberoder mit dem MySQL-Treiber arbeiten mochte.

4.2 Login

Man braucht, um mit dem Applet arbeiten zu konnen, einen Login (bestehendaus Benutzername und Passwort) fur eine Datenbank. Wenn man das AppletSQuiggLe startet, offnet es erst einmal ein Eingabefenster fur Benutzeranfragen,eine GUI (Graphical User Interface). In einer GUI (im Folgenden wird der Ein-fachheit halber eine GUI als SQuiggLe bezeichnet) ist zunachst keine Verbindungvorhanden, darum sollte man als erstes in einer Sitzung sich auf der Datenbankeinloggen. Das geht im Menu Verbindung, Eintrag Verbinden. . ..

Man bekommt dann die DBS-Standard-Login-Aufforderung zu sehen:

Page 18: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

4.3. BENUTZUNG 17

Die Standardeinstellung fur den Treiber ist “RmiJdbc”, fur die Datenbankinstanz(bzw. URL) “DBIS”. Das sind korrekte Einstellungen, um auf die Entwicklungs-datenbank des FG DBS zuzugreifen. Jetzt mussen nur noch Benutzer und Pass-wort eingegeben werden. Wenn im Passwortfeld die Eingabetaste betatigt wird,sieht das Programm dies als Login-Aufforderung an, so als ob auf “Verbinden”geklickt worden ware.

Es gibt Kombinationen von Treiber und URL, die nicht funktionieren, namlichdann, wenn versucht wird, mit einem nicht passenden nativen Treiber auf eineDatenbank zuzugreifen (beispielsweise falls man mit dem MySQL-Treiber auf eineOracle-Datenbank zugreifen wollte). Außerdem gelten die Login-Daten meistensnur fur eine bestimmte Datenbank.

4.3 Benutzung

Wenn man sich eingeloggt hat, dann hat man das Hauptfenster vor sich. Es be-steht aus den Bereichen Menu (ganz oben), Eingabe (oben), Ausgabe (unten;ist am Anfang leer) und Status (ganz unten):

Page 19: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

4.3. BENUTZUNG 18

Im Eingabebereich kann man SQL-Anfragen eintippen (hier gezeigt: eine schonfertig ausgefuhrte select * from emp Anfrage). Außer select funktionierenauch die Befehle

� delete

� create

� drop

� insert

� update

� execute bzw. die Abkurzung exec

� begin ... end

� explain plan

� describe bzw. die Abkurzung desc

� commit

� savepoint

� rollback

Page 20: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

4.3. BENUTZUNG 19

Einige Befehle aus der obigen Liste sind Oracle-spezifisch. Man muss Anfragennicht mit einem Semikolon abschließen. Die Moglichkeit, mehrere Anfragen aufeinmal zu stellen, wird nicht unterstutzt. Man kann jedoch mehrere Anfragennacheinander stellen, und das sogar, wahrend vorige Anfragen noch laufen.

Es ist auch moglich, laufende Anfragen abzubrechen:

Dabei wird der gerade im Verarbeitungsprozess befindliche Datensatz noch zuEnde eingelesen und dann die Generierung der Nur-Text-Version begonnen (dieman dann auch noch abbrechen kann):

Wenn eine Anfrage zu Ende gelaufen ist, gibt es außer der normalen Ta-bellenansicht (wie auf Seite 17 gezeigt) noch eine Nur-Text-Fassung derselbenDaten, die man allerdings besser per Copy&Paste weitergeben kann:

Page 21: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

4.3. BENUTZUNG 20

Daruberhinaus gibt es noch die Moglichkeit, dass bei einer Oracle-Datenbankein Trigger ausgelost wurde, der Text uber das Package DBMS OUTPUTausgegeben hat, oder es wurde das describe-Kommando ausgefuhrt, welchesauch eine Textausgabe erzeugt; dieser Text ist dann im Dropdown-Feld unter“Server-Output” einzusehen:

Und falls ein entsprechender Trigger in der Datenbank existiert, der das PackageDBMS OUTPUT nutzt, kann es auch eine solche Ausgabe geben:

Der describe-Befehl ist nur fur Oracle-Datenbanken verfugbar und kann aufObjekte vom Typ Table, View, Trigger, Synonym, Procedure, Function, Package,Index, Sequence oder Type angewendet werden. Er versteht die “schema.name”

Page 22: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

4.3. BENUTZUNG 21

Benennungsschreibweise, aber keine Database-Links. Der einzige nennenswerteUnterschied zum SQL*Plus-Befehl describe ist, dass bei Views als zu beschrei-bendem Objekt der den View generierende SQL-Befehl zuruckgegeben wird undnicht die Spalten der resultierenden Tabelle.

Zusatzlich ist in Oracle der explain plan-Befehl verfugbar, allerdingsnoch ein wenig verbessert: Man braucht keine zusatzliche select-Anfragemehr an PLAN TABLE stellen. Das Ergebnis wird sofort dargestellt. Eineweitere Verbesserung ist die graphische Baumdarstellung des zuruckgegebenenAnfrage-Planes.Wenn man auf einzelne Knoten des Baumes klickt, werden auf der rechten SeiteDetails zu diesem Element angezeigt (hier werden gerade die Daten des Knotens“TABLE ACCESS” angezeigt):

Dort, wo zu jedem Anfrageergebnis die gestellte Anfrage steht, wird bei ei-nem explain plan Befehl eine Besonderheit deutlich: Es werden die Befehle

Page 23: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

4.4. BESCHRANKUNGEN 22

dargestellt, die wirklich ausgefuhrt wurden, nicht nur der eine, der vom Benutzereingegeben wurde.

Wenn eine Anfrage, die schon einmal so oder ahnlich gestellt wurde, aus-gefuhrt werden soll, dann kann man die Anfrage in den Eingabebereich kopieren,indem man im Ausgabebereich den Button mit dem weißen Pfeil anklickt. Dabeiwird eventuell im Eingabebereich befindlicher Text uberschrieben!

Wenn Anfragen uberflussig werden, kann man sie uber das Kontextmenu derTabs (auch manchmal Karteireiter genannt) schließen. Auf vielen Systemen off-net man dieses Kontextmenu, indem man mit der rechten Maustaste auf einenKarteireiter klickt.

Bei Benutzung des explain plan-Befehls wird im Ausgabebereich der tat-sachlich ausgefuhrte Code angezeigt. Jedoch wird nur die vom Benutzer einge-gebene Anfrage in den Eingabebereich zuruckkopiert, wenn der Button rechtsneben der Anfrage-Anzeige (weißer Pfeil) geklickt wird.

4.4 Beschrankungen

SQuiggLe hat die typische Performance eines Java-Applets: Es ist nicht fur dieVerarbeitung großer Datenmengen geeignet. Ein grober Richtwert: Falls manmehr als 2000 Datensatze selektieren mochte (oder wenige, aber große Da-tensatze), benutze man ein der Datenbank beiliegendes Client-Programm!

Außerdem wird nicht die Befehlsvielfalt von SQL*Plus erreicht, welches Oraclebeiliegt, andererseits ist SQuiggLe auch nicht von einem bestimmten DBMSabhangig.

4.5 Support

Bitte haben Sie Verstandnis dafur, dass Supportanfragen nur per Email entge-gengenommen und beantwortet werden konnen! Schreiben Sie [email protected],falls Sie Probleme bei der Benutzung von SQuiggLe haben oder neue Featuresvorschlagen mochten.

Page 24: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

23

Kapitel 5

Quellenverzeichnis

[app] How to Make Applets. http://java.sun.com/docs/books/tutorial/uiswing/components/applet.html (Link vom 22.09.2003).

[awt] Abstract Window Toolkit (AWT). http://java.sun.com/j2se/1.3/

docs/guide/awt/ (Link vom 22.09.2003).

[GMS95] M. Goossens, F. Mittelbach, A. Samarin: Der LaTeX Begleiter.Addison-Wesley, Bonn, 1995.

[II99a] ISO, IEC: ISO/IEC 9075-1: SQL/Framework, 1999.

[II99b] ISO, IEC: ISO/IEC 9075-2: SQL/Foundation, 1999.

[II99c] ISO, IEC: ISO/IEC 9075-3: Call Level Interface (SQL/CLI), 1999.

[II99d] ISO, IEC: ISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM),1999.

[II99e] ISO, IEC: ISO/IEC 9075-5: Host Language Bindings (SQL/Bindings),1999.

[Lam94] L. Lamport: LATEX– A Document Preparation System. Addison-Wesley,1994.

[Ora99] Oracle Corporation: Dokumentation zu Oracle 8i: SQL*Plus User’s Gui-de and Reference Part No. A82950-01, 1999.

[Ree97] G. Reese: Database Programming with JDBC and Java. O’Reilly &Associates, 1997.

[rmia] Remote Method Invocation (RMI). http://java.sun.com/products/

jdk/rmi/ (Link vom 22.09.2003).

Page 25: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

24

[rmib] RMI-JDBC-Treiber von ObjectWeb. http://rmijdbc.objectweb.

org/ (Link vom 22.09.2003).

[vH98] A. von Helmolt. Implementierung eines Datenbank-Administrations-Tools in Java. 1998. http://www.dbs.uni-hannover.de/

ftp/studienarbeiten/von_helmolt/von_helmolt.ps.gz (Link vom22.09.2003).

Page 26: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

25

Kapitel 6

JavaDoc Dokumentation

Die JavaDoc-Dokumentation wird mit eingebunden, weil so alles wichtige aufeinen Blick ersichtlich ist. Außerdem konnen so interessierte Programmierer vielleichter Anderungen am Sourcecode vornehmen, da sie nachvollziehen konnen,welche Klassen und Methoden zu welchen Zwecken dienen.

Page 27: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class AnswerPanel

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponent | +-javax.swing.JSplitPane | +-dbis.squiggle.AnswerPanel

public class AnswerPanelextends javax.swing.JSplitPaneimplements javax.accessibility.Accessible, java.io.Serializable, java.awt.image.ImageObserver,java.awt.MenuContainer, java.io.Serializable, java.awt.event.ActionListener, java.awt.event.ItemListener, java.lang.Runnable

JPanel, welches ein fertig ausgeführtes Statement mit Anfrage annimmt und die Ergebnisse anzeigt. Dabei wird für's Einlesen derDatensätze ein neuer Thread generiert, damit man auch das Lesen abbrechen kann.

Author: Mathis Dirksen-Thedens ([email protected])

All Implemented interfaces:java.lang.Runnable, java.awt.event.ItemListener, java.awt.event.ActionListener, java.io.Serializable,java.awt.MenuContainer, java.awt.image.ImageObserver, java.io.Serializable, javax.accessibility.Accessible

Constructors

AnswerPanelpublic AnswerPanel(java.sql.Statement stmnt, java.lang.String sql, java.lang.String anzeigesql, DBMS_OUTPUT serveroutput, java.lang.String beforeserveroutput, GUI gui, javax.swing.JButton cancelbutton, javax.swing.JLabel statusfield)

Konstruktor für's AnswerPanel

Parameters:stmnt -Statement mit fertig [ per stmnt.execute(string)] ausgeführter Anfragesql -ausgeführte Anfragegui -übergeordnete GUIanzeigesql -String, der angezeigt, aber nicht unbedingt genau so ausgeführt wurdeserveroutput -DBMS_OUTPUT-Objekt, woher der Server-Output gelesen werden sollbeforeserveroutput -Vor den Serveroutput einzufügender Text

(continued on next page)

Page 2

dbis.squiggle.AnswerPanel

26

Page 28: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

Methods

runpublic void run()

actionPerformedpublic void actionPerformed(java.awt.event.ActionEvent e)

Aktionsbehandlung

Parameters:e -ein ActionEvent

itemStateChangedpublic void itemStateChanged(java.awt.event.ItemEvent evt)

Aktionsbehandlung

Parameters:evt -ein ItemEvent

Page 3

dbis.squiggle.AnswerPanel

27

Page 29: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class DBMS_OUTPUT

java.lang.Object | +-dbis.squiggle.DBMS_OUTPUT

public class DBMS_OUTPUTextends java.lang.Object

Klasse, um mit DBMS_OUTPUT.put() bzw. DBMS_OUTPUT.put_line() geschriebenen Text über JDBC auslesen zu können.Siehe Thread "Usefulness of DBMS_OUTPUT.PUT_LINE?" in comp.databases.oracle.server vom Juli 2002 für nähereEinzelheiten!

Author: Thomas Kyte ([email protected]), Mathis Dirksen-Thedens ([email protected])

Constructors

DBMS_OUTPUTpublic DBMS_OUTPUT(java.sql.Connection conn)

our constructor simply prepares the three statements we plan on executing. the statement we prepare for SHOW is a blockof code to return a String of dbms_output output. Normally, you might bind to a PLSQL table type but the jdbc driversdon't support PLSQL table types -- hence we get the output and concatenate it into a string. We will retrieve at least oneline of output -- so we may exceed your MAXBYTES parameter below. If you set MAXBYTES to 10 and the first line is100 bytes long, you will get the 100 bytes. MAXBYTES will stop us from getting yet another line but it will not chunk upa line.

Parameters:conn -Datenbank-Verbindung

Exceptions:SQLException -Ausführungsfehler

Methods

enablepublic void enable(int size) throws java.sql.SQLException

enable simply sets your size and executes the dbms_output.enable call

Parameters:size -Größe

Exceptions:SQLException -Fehler

Page 4

dbis.squiggle.DBMS_OUTPUT

28

Page 30: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

disablepublic void disable() throws java.sql.SQLException

disable only has to execute the dbms_output.disable call

Exceptions:SQLException -Fehler

showpublic void show() throws java.sql.SQLException

show does most of the work. It loops over all of the dbms_output data, fetching it in this case 32,000 bytes at a time (giveor take 255 bytes). It will print this output on stdout by default (just reset what System.out is to change or redirect thisoutput).

Exceptions:SQLException -Fehler

show_outputpublic void show_output() throws java.sql.SQLException

Andere Methode, um den Serveroutput auszulesen (mit Hilfe von Joseph Weinstein, siehe Thread"DBMS_OUTPUT.PUT_LINE and JDBC" in comp.databases.oracle vom Juli 2002).

Exceptions:SQLException -Fehler

get_outputpublic java.lang.String get_output() throws java.sql.SQLException

Zweite andere Methode, um den Serveroutput auszulesen, aber jetzt als Rückgabewert und nicht auf System.out!

Returns:

der Server-Output

Exceptions:SQLException -Fehler

closepublic void close() throws java.sql.SQLException

close closes the callable statements associated with the DbmsOutput class. Call this if you allocate a DbmsOutputstatement on the stack and it is going to go out of scope -- just as you would with any callable statement, result set and soon.

Exceptions:SQLException -Fehler

Page 5

dbis.squiggle.DBMS_OUTPUT

29

Page 31: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class GUI

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.JFrame | +-dbis.squiggle.GUI

public class GUIextends javax.swing.JFrameimplements javax.swing.WindowConstants, javax.accessibility.Accessible,javax.swing.RootPaneContainer, java.awt.MenuContainer, javax.accessibility.Accessible,java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable,java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.WindowListener

GUI für SQuiggLe

Author: Mathis Dirksen-Thedens ([email protected])

All Implemented interfaces:java.awt.event.WindowListener, java.awt.event.MouseListener, java.awt.event.ActionListener, java.io.Serializable,java.awt.MenuContainer, java.awt.image.ImageObserver, javax.accessibility.Accessible, java.awt.MenuContainer,javax.swing.RootPaneContainer, javax.accessibility.Accessible, javax.swing.WindowConstants

Fields

resolveSynonymsForDescribepublic boolean resolveSynonymsForDescribe

Ob Synonyme aufgelöst werden sollen, wenn per Describe darauf zugegriffen wird. Auflösen kostet Rechenzeit!!!

Constructors

GUIpublic GUI()

Konstruktor für die GUI

Methods

mouseClickedpublic void mouseClicked(java.awt.event.MouseEvent e)

MouseListener-Implementation

Page 6

dbis.squiggle.GUI

30

Page 32: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

Parameters:e -Parameter

mouseEnteredpublic void mouseEntered(java.awt.event.MouseEvent e)

MouseListener-Implementation

Parameters:e -Parameter

mouseExitedpublic void mouseExited(java.awt.event.MouseEvent e)

MouseListener-Implementation

Parameters:e -Parameter

mousePressedpublic void mousePressed(java.awt.event.MouseEvent e)

MouseListener-Implementation

Parameters:e -Parameter

mouseReleasedpublic void mouseReleased(java.awt.event.MouseEvent e)

MouseListener-Implementation

Parameters:e -Parameter

actionPerformedpublic void actionPerformed(java.awt.event.ActionEvent e)

Aktionsbehandlung

Parameters:e -ein ActionEvent

substituteCRLFpublic static java.lang.String substituteCRLF(java.lang.String string, char c)

Allgemeine Hilfsmethode: Ersetzt CRLF. Mit Hilfe aus dem Internet geschrieben!

Parameters:

Page 7

dbis.squiggle.GUI

31

Page 33: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

string -Eingabestringc -Buchstabe, der eingesetzt werden soll

Returns:

den fertigen String

cleanuppublic void cleanup()

Aufräumen... Diese Methode wird vom Applet beim STOP benötigt; aufgerufen wird sie über close().

closepublic void close()

Schließer

errorHandlerprotected void errorHandler(java.lang.Throwable ex)

Fehlerbehandlung (auch für andere darstellende Klassen). Der Fehler wird der Liste für showFailures() hinzugefügt unddann dem Benutzer angezeigt.

Parameters:ex -der Fehler

setSqlTextpublic void setSqlText(java.lang.String sql)

Setzt das SQL-Eingabefeld. Diese Methode wird vom AnswerPanel aufgerufen.

Parameters:sql -Neuer Wert für das Eingabefeld

setAPNotDisplayablepublic void setAPNotDisplayable()

Sagt der GUI, dass das letzte AnswerPanel nicht angezeigt werden kann, weil ein Fehler aufgetreten ist.

replacepublic static java.lang.String replace(java.lang.String in, java.lang.String toreplace, java.lang.String replacewith)

Ersetzt in einem String etwas durch etwas anderes.

Parameters:in -Eingabetoreplace -zu ersetzenreplacewith -womit ersetzen

Returns:

Page 8

dbis.squiggle.GUI

32

Page 34: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

Ausgabe

windowActivatedpublic void windowActivated(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

windowClosedpublic void windowClosed(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

windowClosingpublic void windowClosing(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

windowDeactivatedpublic void windowDeactivated(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

windowDeiconifiedpublic void windowDeiconified(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

windowIconifiedpublic void windowIconified(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

Page 9

dbis.squiggle.GUI

33

Page 35: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

windowOpenedpublic void windowOpened(java.awt.event.WindowEvent e)

WindowListener-Implementation

Parameters:e -Parameter

Page 10

dbis.squiggle.GUI

34

Page 36: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class HelpViewer

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.JFrame | +-dbis.squiggle.HelpViewer

public class HelpViewerextends javax.swing.JFrameimplements javax.swing.WindowConstants, javax.accessibility.Accessible,javax.swing.RootPaneContainer, java.awt.MenuContainer, javax.accessibility.Accessible,java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable,java.awt.event.ActionListener

Betrachter für eine HTML-Datei

Author: Mathis Dirksen-Thedens ([email protected])

All Implemented interfaces:java.awt.event.ActionListener, java.io.Serializable, java.awt.MenuContainer, java.awt.image.ImageObserver,javax.accessibility.Accessible, java.awt.MenuContainer, javax.swing.RootPaneContainer,javax.accessibility.Accessible, javax.swing.WindowConstants

Constructors

HelpViewerpublic HelpViewer(GUI parent, java.lang.String helpfile)

Konstruktor für HelpViewer

Parameters:helpfile -Dateiparent -aufrufende GUI

Methods

actionPerformedpublic void actionPerformed(java.awt.event.ActionEvent e)

ActionListener-Implementierung

Parameters:

Page 11

dbis.squiggle.HelpViewer

35

Page 37: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

e -Parameter

Page 12

dbis.squiggle.HelpViewer

36

Page 38: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class Node

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponent | +-javax.swing.JLabel | +-dbis.squiggle.Node

public class Nodeextends javax.swing.JLabel

allgemeiner Knoten; wird für die Baumdarstellung eines Plans benutzt

Author: Mathis Dirksen-Thedens ([email protected])

Constructors

Nodepublic Node()

Default-Konstruktor für Node

Nodepublic Node(int attached_data_count)

Konstruktor für Node

Parameters:attached_data_count -Wie viele einzelne Daten (Objects) an den Knoten angeheftet werden können sollen

Nodepublic Node(java.lang.String name, int id, java.lang.Object attached_data, java.lang.String attached_data_names, java.lang.String attached_data_hints)

Konstruktor für Node

Parameters:name -Name des Knotensattached_data -die Daten, die an den Knoten angeheftet werden sollenattached_data_names -die Namen zu den angehefteten Datenattached_data_hints -Beschreibungen zu den angehefteten Daten

Page 13

dbis.squiggle.Node

37

Page 39: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

id -ID

Methods

setAttachedDatapublic void setAttachedData(int i, java.lang.Object datum)

Setzt ein angeheftetes Datum.

Parameters:i -Indexdatum -Neuer Wert

getAttachedDatapublic java.lang.Object getAttachedData(int i)

Holt ein angeheftetes Datum.

Parameters:i -Index

Returns:

ein Object

setAttachedDataNamepublic void setAttachedDataName(int i, java.lang.String name)

Setzt den Namen eines angehefteten Datums.

Parameters:i -Indexname -Neuer Wert

getAttachedDataNamepublic java.lang.String getAttachedDataName(int i)

Holt den Namen eines angehefteten Datums.

Parameters:i -Index

Returns:

ein Name

setAttachedDataHintpublic void setAttachedDataHint(int i, java.lang.String hint)

Page 14

dbis.squiggle.Node

38

Page 40: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

Setzt den Hint eines angehefteten Datums.

Parameters:i -Indexhint -Neuer Wert

getAttachedDataHintpublic java.lang.String getAttachedDataHint(int i)

Holt den Hint eines angehefteten Datums.

Parameters:i -Index

Returns:

ein Hint

addChildpublic void addChild(Node child)

Unterknoten hinzufügen

Parameters:child -der Unterknoten

getChildByIDpublic Node getChildByID(int id)

Sucht den passenden Node aus den Unter-Nodes per Depth-First-Suche heraus.

Parameters:id -ID

Returns:

ein Node oder null

getChildAtpublic Node getChildAt(int i)

Holt einen Unter-Node

Parameters:i -Index

Returns:

Unter-Node

getChildCountpublic int getChildCount()

Page 15

dbis.squiggle.Node

39

Page 41: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

Holt die Unter-Node-Anzahl

Returns:

Unter-Node-Anzahl

getIDpublic int getID()

Holt die ID von diesem Node

Returns:

ID

getNamepublic java.lang.String getName()

Holt das Attribut name von Node

Returns:

Wert von name

getAttachedDataCountpublic int getAttachedDataCount()

Holt das Attribut attachedDataCount von Node

Returns:

Wert von attachedDataCount

setIDpublic void setID(int id)

Setzt die ID von diesem Node

Parameters:id -Neue ID

toStringpublic java.lang.String toString()

Standardmethode (gut zum Debuggen)

Returns:

der String

toStringpublic java.lang.String toString(java.lang.String padding)

Standardmethode (gut zum Debuggen)

Parameters:

Page 16

dbis.squiggle.Node

40

Page 42: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

padding -Einrückung

Returns:

der String

Page 17

dbis.squiggle.Node

41

Page 43: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class ServerOutputArea

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponent | +-javax.swing.text.JTextComponent | +-javax.swing.JTextArea | +-dbis.squiggle.ServerOutputArea

public class ServerOutputAreaextends javax.swing.JTextArea

TextArea für ServerOuput von DBMS_OUTPUT

Author: Mathis Dirksen-Thedens ([email protected])

Constructors

ServerOutputAreapublic ServerOutputArea(java.lang.String content)

Konstruktor für ServerOutputArea

Parameters:content -Inhalt des neuen Textfeldes

Page 18

dbis.squiggle.ServerOutputArea

42

Page 44: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class SquiggleApplet

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Panel | +-java.applet.Applet | +-javax.swing.JApplet | +-dbis.squiggle.SquiggleApplet

public class SquiggleAppletextends javax.swing.JAppletimplements javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.accessibility.Accessible, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable,java.awt.event.ActionListener

Applet, welches SQuiggLe startet.

Author: Mathis Dirksen-Thedens ([email protected])

All Implemented interfaces:java.awt.event.ActionListener, java.io.Serializable, java.awt.MenuContainer, java.awt.image.ImageObserver,javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.accessibility.Accessible

Constructors

SquiggleAppletpublic SquiggleApplet()

Konstruktor fürs SquiggleApplet

Methods

actionPerformedpublic void actionPerformed(java.awt.event.ActionEvent e)

Aktionsbehandlung

Parameters:e -Parameter

initpublic void init()

INIT des Applets

Page 19

dbis.squiggle.SquiggleApplet

43

Page 45: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

startpublic void start()

START des Applets

stoppublic void stop()

STOP des Applets

paintpublic void paint(java.awt.Graphics g)

Überschreibt die PAINT-Methode, um Rahmen und Text hinzuzufügen.

Parameters:g -Parameter

Page 20

dbis.squiggle.SquiggleApplet

44

Page 46: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class TreePane

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponent | +-javax.swing.JSplitPane | +-dbis.squiggle.TreePane

public class TreePaneextends javax.swing.JSplitPane

Klasse, um  1. einen Baum aus dbis.squiggle.Node-Objekten mit AWT/Swing darzustellen und2. Informationen zu den Objekten anzuzeigen, die angeklickt werden. 

Author: Mathis Dirksen-Thedens ([email protected])

Constructors

TreePanepublic TreePane(TreeView myTreeView)

Konstruktor für TreePane

Parameters:myTreeView -TreeView-Objekt, das dargestellt werden soll

Methods

nodeClickedpublic void nodeClicked(Node clickedNode)

Wird vom TreeView aus aufgerufen, um Infos anzuzeigen.

Parameters:clickedNode -die Node, um die es geht

Page 22

dbis.squiggle.TreePane

45

Page 47: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

dbis.squiggle

Class TreeView

java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponent | +-javax.swing.JPanel | +-dbis.squiggle.TreeView

public class TreeViewextends javax.swing.JPanelimplements javax.accessibility.Accessible, java.io.Serializable, java.awt.image.ImageObserver,java.awt.MenuContainer, java.io.Serializable, java.awt.event.MouseListener

Klasse, um einen Baum aus dbis.squiggle.Node-Objekten mit AWT/Swing darzustellen

Author: Mathis Dirksen-Thedens ([email protected])

All Implemented interfaces:java.awt.event.MouseListener, java.io.Serializable, java.awt.MenuContainer, java.awt.image.ImageObserver,java.io.Serializable, javax.accessibility.Accessible

Constructors

TreeViewpublic TreeView(Node rootnode)

Konstruktor für TreeView

Parameters:rootnode -Baum bzw. Rootnode des Baums

Methods

paintComponentpublic void paintComponent(java.awt.Graphics g)

Linien zeichnen

Parameters:g -ein Graphics Objekt

getRootNodepublic Node getRootNode()

Holt die rootNode

Page 23

dbis.squiggle.TreeView

46

Page 48: Implementierung einer graphischen Benutzerschnittstelle ... · Ein Applet ist eine Ansammlung von Klassen, die nicht uber den normalen Java-¨ Bytecode-Interpreter java ausgef¨uhrt

(continued from last page)

Returns:

die rootNode

mouseClickedpublic void mouseClicked(java.awt.event.MouseEvent e)

Interface-Implementierung

Parameters:e -ein MouseEvent

mousePressedpublic void mousePressed(java.awt.event.MouseEvent e)

Interface-Implementierung

Parameters:e -ein MouseEvent

mouseReleasedpublic void mouseReleased(java.awt.event.MouseEvent e)

Interface-Implementierung

Parameters:e -ein MouseEvent

mouseEnteredpublic void mouseEntered(java.awt.event.MouseEvent e)

Interface-Implementierung

Parameters:e -ein MouseEvent

mouseExitedpublic void mouseExited(java.awt.event.MouseEvent e)

Interface-Implementierung

Parameters:e -ein MouseEvent

setListenerpublic void setListener(TreePane listener)

Setzt den Listener

Parameters:listener -Neuer Wert von listener

Page 24

dbis.squiggle.TreeView

47