implementierung einer graphischen benutzerschnittstelle ... · ein applet ist eine ansammlung von...
Post on 12-Oct-2019
7 Views
Preview:
TRANSCRIPT
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
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
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.
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
1.4. VORBEREITUNGEN 4
jeden Fall nachgebildet werden, wobei erst einmal geklart werden musste, was ereigentlich fur die verschiedenen Datenbank-Objekte zuruckgibt. [Ora99]
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.
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
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!
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
� . . .
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.
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
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))
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):
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
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.
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.
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:
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):
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
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:
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”
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
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 ansquiggle@dbs.uni-hannover.de,falls Sie Probleme bei der Benutzung von SQuiggLe haben oder neue Featuresvorschlagen mochten.
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).
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).
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.
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 (mathis@uni.de)
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
(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
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 (tkyte@oracle.com), Mathis Dirksen-Thedens (mathis@uni.de)
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
(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
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 (mathis@uni.de)
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
(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
(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
(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
(continued from last page)
windowOpenedpublic void windowOpened(java.awt.event.WindowEvent e)
WindowListener-Implementation
Parameters:e -Parameter
Page 10
dbis.squiggle.GUI
34
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 (mathis@uni.de)
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
(continued from last page)
e -Parameter
Page 12
dbis.squiggle.HelpViewer
36
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 (mathis@uni.de)
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
(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
(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
(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
(continued from last page)
padding -Einrückung
Returns:
der String
Page 17
dbis.squiggle.Node
41
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 (mathis@uni.de)
Constructors
ServerOutputAreapublic ServerOutputArea(java.lang.String content)
Konstruktor für ServerOutputArea
Parameters:content -Inhalt des neuen Textfeldes
Page 18
dbis.squiggle.ServerOutputArea
42
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 (mathis@uni.de)
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
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
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 (mathis@uni.de)
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
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 (mathis@uni.de)
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
(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
top related