# Master/Detail Tabellen mit JDBC und Swing



## ICanHasNick (16. Jul 2011)

Hallo,

wie würdet Ihr eine kleine Anwendung in J2SE realisieren, die Daten aus zwei verschiedenen Datenbank-Tabellen (z.B. Länder und Städte) in zwei JTables visualisiert und diese als Master/Detail Ansicht miteinander verknüpft.
Also ganz simpel, beim Klick auf eine Tabellenzeile in der Länder-Tabelle sollen nur Städte des betreffenden Landes in der Städte-Tabelle gezeigt werden.

Keine IDE, keine Frameworks, keine Beans oder Fremdbibliotheken. 
Nur JDBC und Swing

Gruß


----------



## Eldorado (16. Jul 2011)

Und wie war jetzt die Frage?


----------



## ARadauer (16. Jul 2011)

Ich versteh auch die Frage nicht ganz? Wie meinst du das "würdet Ihr eine kleine Anwendung in J2SE realisieren"? Jetzt so vom Aufbau der Anwendung, oder wie meinst du das? Ja ganz normal halt... mvc und dao Pattern..


----------



## nocturne (16. Jul 2011)

UI-Design

Generell gillt immer: Bestehende Muster übernehmen!

z.B. Der Windows-Explorer hat links die Ordner, rechts die Dateien
oder Outlook Express (aka Windows Mail), links die Master, rechts die Details.

Grundsätzlich kommt es aber auf mehr an, so sollen wesentliche Elemente schnell ersichtlich sein (z.B. Das Windows-Start-Menü).


Ablauf:
Bei Programmstart die Master laden, vorselektieren und Actionlistener-klick Simulieren.
Bei Klick auf Master die Detail-Liste laden.

@RAdauer
DAO? Sind doch auch Beans.


----------



## ICanHasNick (17. Jul 2011)

Die dritte Antwort ist das wonach ich gesucht habe.

Es geht darum, bei bestimmten, simplen Anforderungen nicht den kompletten Java-Overkill zu benutzen. Mit der NetBeans IDE soll das einfach zu machen sein, die benutze ich aber nicht.

Die UI Gestaltungstipps kann ich leider nicht umsetzen, da ich auch Windows nicht benutze und nicht weiß, wie diese Programme heute aussehen   
Der Ablauf an sich ist, so wie oben geschildert, einfach umzusetzen und vollständig transparent.

Was mich weiter interessieren würde, muss ich jetzt für jeden Event in der Master-Table per  SQL-Statement die Detail-Tabelle füllen oder könnte/sollte man die Daten in Tabelle 2 ( auf einfache Art ) filtern?

Gruß


----------



## tuttle64 (17. Jul 2011)

ICanHasNick hat gesagt.:


> Was mich weiter interessieren würde, muss ich jetzt für jeden Event in der Master-Table per  SQL-Statement die Detail-Tabelle füllen oder könnte/sollte man die Daten in Tabelle 2 ( auf einfache Art ) filtern?




Wenn Du die Länder mit einem JTree darstellst, dann werden beim Selektieren eines Landes "automatisch" die entsprechenden Städte selektiert. Einzige Voraussetzung ist, dass beim Aufbau des JTree die Städte richtig eingeordnet worden sind. Sofern die Datenmenge bescheiden ist, würde ich alle Länder und Städte von der DB lesen und fertig.


----------



## rhoermann (19. Jul 2011)

Warum willst du kein Framework dafür verwenden. Diese Problemstellung wurde schon mehrfach gelöst! Du beginnst nun mit recht simplen Anforderungen und schnell wird es komplexer, wie Filterung im Memory oder via DB. Suche im Memory oder via DB. Caching von bereits geladenen Daten oder immer wieder live Daten holen, Load-on-demand, usw..

Im Prinzip kannst du aber einfach beginnen:

Anzeigen der Daten in simplen JTables. 
Dann beim Zeilenwechsel immer wieder die Detail Daten auslesen (vorsicht vor wiederholten Aufrufen)
(Du solltest dir einen Mechanismus überlegen um eine Verbindung zwischen Master und Detail zu definieren, bei DBs wäre das über Columns zu machen)
Dann kannst du mit Caching beginnen um Statements zu sparen
...

Das sollte für den Anfang genügen.

Der Tree macht die Sache nicht leichter, würde dir empfehlen zuerst die grundsätzlichen Probleme zu lösen.

Oder vielleicht doch lieber ein Framework verwenden?


----------



## ICanHasNick (19. Jul 2011)

rhoermann hat gesagt.:


> Warum willst du kein Framework dafür verwenden. Diese Problemstellung wurde schon mehrfach gelöst!



Also, um ehrlich zu sein, es geht nicht wirklich um Länder und Städte, das war nur ein Beispiel. Ich möchte eine meiner alten Delphi Anwendungen mit 50+ Tabellen nach Java portieren.

In dieser Anwendung ist die komplette Geschäftslogik in der Datenbank und den Querys enthalten. Na ja und so ein Framework möchte meine schönen SQL-Konstukte in irgendwelche Objekte umwandeln, die ich gar nicht brauche und noch drei Abstraktionsschichten dazwischen schieben.

Was ich brauche sind einfach datensensitive Tabellen, die man mit SQL füttern und miteinander als Master/Detail verknüpfen kann.


----------



## rhoermann (19. Jul 2011)

Verstanden. Also wenn du eine ausgewachsene App portieren willst, dann kann ich dir JVx wärmstens empfehlen. Damit brauchst du keinen Source Code generieren (es sei denn du bestehst drauf). Du verwendest einfach bestehende Datenbanken mit Logik in der DB (Trigger, Views, ...) oder du verwendest vorhandene Logiken und packst diese in Java Klassen und verwendest diese in der Middleware.

Du musst mit JVx auch keine Client Server app bauen, auch wenn es dafür fein ist. Du kannst dir auch eine Desktop app erstellen.

Im einfachsten Fall nimmst du dir nur die Model Implementierung und die Swing Komponenten und baust diese in eine vorhandene Swing Applikation ein.

Es gibt einige Demo Anwendungen die Master/Detail Beziehungen zeigen und auch Suche, Filterung, Load-on-Demand usw.

Und wenn du mal etwas neues sehen willst, dann zieh dir mal die Videos in dem Channel rein: DB Apps entwickeln


Um unabhängig von Frameworks zu bleiben: Es geht natürlich auch zu Fuß, doch bedenke das du doch einiges Swing Know How brauchst, und dann noch etwas mehr Zeit um die Tücken zu lösen.

Ich könnte dir aber auch in diesem Bereich ein paar Tipps geben.


----------



## ICanHasNick (21. Jul 2011)

Habe mir gestern den WindowBuilderPro von Google heruntergeladen. Da ist bei mir der Spieltrieb durchgegangen , daher auch erst Heute die Antwort 

Ich habe mir mal die Demos vom JVx Framework unter Ubuntu 10.04 (64-bit) angesehen.

Bin auch sofort auf ein paar Schwierigkeiten gestoßen. Aber als eingefleischter Linux User ist man das ja gewohnt. Zunächst musste ich die metacity-default-theme ändern um die Demo mit WebStart überhaupt zum laufen zu bringen ( im Firefox läuft es als Applet überhaupt nicht, Im Explorer - XP in der VirtualBox - gibt er einen Class Loader Fehler an ). Beim Klick auf Button "Komponenten" bringt er mir dann einen StackOverflowError. Die GUI ist auch aufgrund fehlender Scrollbalken z.T. nicht bedienbar. Die Response einzelner GUI-Elemente empfand ich als relativ träge. UTF Eingaben werden nicht übernommen.

Ansonsten aber sieht es  doch ganz nett und brauchbar aus. Werde es demnächst mal unter Eclipse  durchtesten, um zu sehen was ich da für mich rausholen kann. 

Was Swing betrifft ist nach meinem ersten Gefühl die Entwicklung und Erweiterung von Komponenten wesentlich einfacher als das was ich unter Delphi (Kenntnisstand bis Version 7) gewohnt war. Die Ereignisbehandlung ist viel simpler und dass die GUI von Haus aus auf einem eigenen Thread läuft finde ich eigentlich gut.

Danke jedenfalls für dein Angebot der Hilfestellung. Fragen werden sicher noch kommen, wenn ich erst einmal in der Materie drin bin und feststecke.

Gruß

S.


----------



## rhoermann (21. Jul 2011)

Danke für deinen Bericht, da wird es mal Zeit für eine Ubuntu Testumgebung  Auf meiner CentOS Box gab es bisher eigentlich keine Probleme und Windows lief bisher auch einwandfrei. Auch unter MacOS macht es einen guten Eindruck. Mal versuchen die Probleme nachzustellen.

UTF Probleme sind klar, weil die DB nicht mit UTF eingerichtet wurde.


----------

