JavaSQL
Tool zum Testen von Verbindungen und Abfragen via JDBC
Motivation
Bei der Entwicklung von Anwendungen ist es häufig notwendig, Datenbankverbindungen und die gespeicherten Daten sowie die Korrektheit von Abfragen zu überprüfen. Bei der Entwicklung mit Java steht dazu das JDBC-Framework zur Verfügung. Um nicht jedesmal potentiell aufwendige Anwendungen laden zu müssen, habe ich dieses Tool geschrieben, mit dem es ohne großen Aufwand möglich ist, unter Verwendung des "realen" Treibers Datenbankverbindungen, in Relationen abgelegte Daten und SQL-Querys bezüglich ihrer Korrektheit und Ergebnisse zu überprüfen.
Anwendbarkeit
Im Grunde genommen sollte dies Tool mit jeder Datenbank funktionieren, die über einen JDBC-Treiber verfügt und von sich behauptet, annähernd zu ANSI-SQL kompatibel zu sein. Ich selbst habe das Tool bereits erfolgreich verwendet mit Access (je nach Version erfolgreich oder nicht), Orace Thin und Oracle OCI (hier muß man die C-Bibliotheken in den CLASSPATH aufnehmen!), PostgreSQL, DB2, MySQL und Interbase/Firebird.
Beschreibung der Funktionalität
Applikationsstart
Nach Starten der Anwendung erhält man die folgende Ansicht:

Hier kann man über die üblichen Icons
- eine Session anlegen - damit ist das Erfassen der notwendigen Daten gemeint, über die die Verbindung zur Datenbank hergestellt wird; Details siehe unten
- eine gespeicherte Session wiederherstellen - dabei werden die Verbindungsdaten einer früher erstellten Session aus dem Dateisystem geladen
- eine Session sichern - die Daten der aktuell aktiven Verbindung werden (ohne Password) im Dateisystem abgelegt
- eine Session beenden - die aktuelle Datenbankverbindung wird gekappt, alle Resourcen werden wieder freigegeben
Eine Session anlegen
Anklicken des entsprechenden Icons bringt den Benutzer in den folgenden Dialog (hier mit Beispieldaten einer Postgres-Datenbank):

Folgende Daten müssen hier angegeben werden:
- JDBC-URL: Hier muß die vollständige JDBC-URL zur Adressierung der Datenbank angegeben werden. Diese ist abhängig vom Datenbankprodukt und vom verwendeten Treiber.
- Benutzer-Name: Der Name des für die Verbindung zu verwendenden Nutzers
- Password: Das Password des Datenbanknutzers. Dieses Datum wird nicht abgespeichert.
- Eventuelle Klassenpfaderweiterung: Falls die Klassen des Treibers sich beim Starten des Programms nicht im Klassenpfad befinden, kann man hier den absoluten Pfad (Pfad, JAR, ZIP) angeben, über den diese Klassen ansprechbar sind. Mit dem Button hinter dem Feld kann man die gesamte Klassenpfaderweiterung dynamisch erweitern.
- JDBC Driver class (Treiberklasse): Der FQN der Klasse, die die Treiberfunktionalität für die angegebene Datenbank zur Verfügung stellt.
Tabellenübersicht
Nach Herstellung der Verbindung zur Datenbank wird die Übersicht geöffnet, unterteilt nach Tabellen und Abfragen. Bei einer frisch angelegten Session steht hier nichts drin. Bei gespeicherten Sessions findet man hier Einträge, die in früheren Session gespeichert wurden.

Um Einblicke in die Daten einer Tabelle zu bekommen,
- wählt man im Register Tabellen einen Eintrag durch Anklicken aus und klickt im Anschluss auf "Öffnen"
- klickt man auf "Neu" und gibt im Anschluß den Namen der zu öffnenden Relation an
Tabellendaten
Dadurch gelangt man in eine Tabelle wie die folgende:

Man kann jetzt
- Tabellendaten direkt editieren: Einfach anklicken und Einträge ändern, die Änderungen werden sofort übernommen
- der Tabelle Daten hinzufügen: Durch Anklicken von "Datensatz hinzufügen" öffnet sich ein Dialog, in dem man die einzelnen Tabellenspalten für einen Datensatz mit Daten füllen kann
- Datensätze löschen: Nach Anklicken eines oder mehrerer Datensätze steht der Button "Löschen" zur Verfügung, mit dem die Auswahl gelöscht wird
- die Tabellenreferenz der Übersicht hinzufügen: Durch Klicken auf Speichern wird ein Dialog geöffnet, in dem man zum bereits bekannten Namen eine Beschreibung angeben kann. Name und Beschreibung werden dann in der Session abgelegt und erscheinen ab sofort in der Tabellenübersicht.
Einen Datensatz hinzufügen
Durch Anklicken dieses Punktes in dem Dialog zur Darstellung der Tabellendaten wird ein Dialog geöffnet, in dem man für jede Spalte der aktuellen Tabelle Daten eingeben kann. Durch Klicken von "Ok" werden diese Daten in die Tabelle übernommen, "Abbrechen" macht die Änderung rückgängig.

Abfragenübersicht
In die Abfragenübersicht gelangt man, wenn man nach Verbindungsherstellung in der Tabellenübersicht auf die Registerkarte "Abfragen" klickt. Analog zur Tabellenübersicht werden hier in vorhergehenden Sessions gespeicherte Abfragedefinitionen mit Erläuterung angezeigt.

Auch die Bedienung erfolgt analog zur Tabellenübersicht, man
- wählt einen Eintrag durch Anklicken aus und klickt im Anschluss auf "Öffnen"
- klickt auf einen Abfragenamen und löscht diesen im Anschluß
- klickt auf "Neu" und kommt in das Abfrageeingabefenster
Abfrageneingabe
Das Fenster zur Eingabe von SQL-Abfragen ist in 4 Bereiche aufgeteilt:
- Oben links befindet sich der Ergebnisbereich, in dem bei SELECT-Abfragen die Ergebnisdaten in Tabellenform angezeigt werden.
- Oben rechts befindet sich ein Bereich mit eventuellen Fehlermeldungen, die von der Datenbankverbindung zurückgeliefert werden.
Mittig rechts befindet sich das Protokoll, in dem ausgeführte Abfragen im Wortlaut angezeigt werden. Durch Anklicken werden sie übernommen in den Abfragebereich.
- Unten befindet sich der Abfragebereich. Der Benuter kann hier SQL-Statements eingeben oder sie durch Anklicken aus dem Protokoll übernehmen. "Ok" führt die Abfrage aus, übernimmt das Statement ins Protokoll und stellt entsprechende Daten im Ergebnis- und im Fehlerbereich dar. "Löschen" setzt die Eingabe zurück und "Speichern" öffnet einen Dialog, in dem man für die aktuelle Abfrage einen Namen und eine Beschreibung hinterlegen kann, unter der sie dann in der Abfrageübersicht angezeigt wird.

Download und Ausführung
Binaries
Aufruf mit java -jar JavaSQL.jar
; JavaSQL.jar gibts hier.
Quelltext
Die Quellen gibt's hier im Archiv JavaSQL_src.tar.bz2.
Lizenzierung
Das Programm steht unter der GNU General Public License. Eine Kopie des Lizenztextes ist den Quellen beigefügt.
Bugs
Internationalisierung
Die Internationalisierung ist mangelhaft. Deutsch und Englisch werden zwar vollständig unterstützt, Französisch ist allerdings fast überhaupt nicht umgesetzt. Eine der nächsten Updates sollte das kurieren. Vielleicht kommen bis dahin auch noch Spanisch und Italienisch hinzu.
Dokumentation
Die Dokumentation ist bisher quasi nicht existent. Das Hauptaugenmerk wird in der nächsten Zeit auf Abstellung dieses Mißstandes liegen.
