Hallo zusammen,
ich suche schon seit einigen Tagen nach Rat - habe aber nirgendwo eine brauchbare Antwort finden können - und zusätzlich noch wenig Erfahrung in Java.
Folgendes:
Mein Applet soll meinem Servlet eine SQL-Anfrage rüberschieben. Das klappt auch ganz gut - und das Servlet antwortet sogar. Auf der Appletseite wird die Antwort in einen stringBuffer übernommen und soll - genau das ist das Problem - in eine JTable eingetragen werden. Wie kann ich die Antwort sinnvoll in die JTable bringen? - Ist diese Kommunikationsmethode überhaupt performant oder gibs ne bessere Möglichkeit?
In diesem Zusammenhang: kann ich ein Array bzw ein ResultSet direkt über die Leitung schicken?
Auf der Appletseite wird die Antwort in einen
stringBuffer übernommen und soll - genau das ist das Problem -
in eine JTable eingetragen werden. Wie kann ich die Antwort
sinnvoll in die JTable bringen?
Du kannst eine eine Ableitung von AbstractTableModel schreiben, die einerseits den StringBuffer parsed und andererseits den Inhalt dann über die vorgeschriebenen Methoden als Tabelle zur Verfügung stellt. Das AbstractTableModel kannst du einfach dem JTable übergeben und er stellt es dar. Details kann ich dir leider kaum mehr sagen, ist schon eine Weile her das ich das verwendet habe, kann dir aber Source schicken, wenn du möchtest.
Ist diese
Kommunikationsmethode überhaupt performant oder gibs ne
bessere Möglichkeit?
In diesem Zusammenhang: kann ich ein Array bzw ein ResultSet
direkt über die Leitung schicken?
Hmmmm, ich weiß nicht genau wie die Kommunikation zwischen Servlet und Applet aussieht (ich nehme mal an HTTP, oder?), aber du kannst Datenstrukturen serialisieren, d. h. in eine Kette von Zeichen umwandeln die die Daten enthält und auf einen Stream schreiben und daraus wieder rekonstruieren. Ich nehme mal an, dass die Kommunikation auf die eine oder andere Art und Weise über einen Stream erfolgt, mit ein bißchen Tricksen würde es aber auch über übertragene Strings gehen.
Die übertragene Datenstruktur muß das Interface Serializable implementieren. Auf ein ResultSet (übrigens auch ein Interface) trifft das aber nicht zu bzw. hängt es von der jeweiligen Implementierung ab, es wird zumindest nicht vom ResultSet vorgeschrieben.
Du könntest aber die von AbstractTableModel abgeleitete Klasse schon am Server erzeugen, serialisieren, zum Client schicken und dort deserialiseren.
Infos zur Serialisierung findest du u. a. bei der Doku der Klassen ObjectOutputStream.
Falls du irgendwo detailliertere Hilfestellung benötigst, schreib einfach nochmal. :o)
Du kannst eine eine Ableitung von AbstractTableModel
schreiben, die einerseits den StringBuffer parsed und
andererseits den Inhalt dann über die vorgeschriebenen
Methoden als Tabelle zur Verfügung stellt. Das
Kann mir jemand einen Tipp geben, wie ich dies am Besten durchführe. Ich habe zwar in vielen Dokus geschaut - aber nichts brauchbares finden können.
Auf welchen Teil des gequoteten Textes beziehst du dich?
AbstractTableModel? Parsen des StringBuffer?
Oops, sorry…
Also: Ich möchte aus der Datenbank entweder ein zweidimensionales Array erzugen (um es in die JTable einzufügen) oder ein AbstractTableModel (aber wohl lieber das komplette Abstract…). Derzeit liegt ein ResultSet vor.
Also: Ich möchte aus der Datenbank entweder ein
zweidimensionales Array erzugen (um es in die JTable
einzufügen) oder ein AbstractTableModel (aber wohl lieber das
komplette Abstract…). Derzeit liegt ein ResultSet vor.
Hmmmm, ich kann dir wie gesagt Source schicken. Das ganze besteht aus zwei Klassen, eine abstrakte Klasse Search die von AbstractTableModel abgeleitet ist und eine Klasse KDSearch die wiederum von Search abgeleitet ist.
Search war in diesem Fall eine allgemeine Klasse zur Implementierung von Datenbankabfragen bzw. deren Anzeige in einem JTable, KDSearch dann eine konkrete Implementierung für eine bestimmte Tabelle.
Die KDSearch-Klasse bzw. deine eigene Ableitung von AbstractTableModel übergibst du dem JTable im Konstruktor.
Falls sich am AbstractTableModel etwas ändert, oder du es vielleicht leer übergeben hast und dann erst die Datenbank-Abfrage gestartet hast, dann kannst du über die Methode JTable.tableChanged() updaten.
Ich schick dir den Source per Mail, falls es noch weiter Fragen gibt, kein Problem, schreib einfach.