2Danke
ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
1971
1971
EMPFEHLEN
-
10.11.10 12:54 #1
Hallo,
da mir letztens so gut geholfen wurde, gleich ein neues Problem:
ich will Daten in eine JTable einfügen mit einer while-Schleife.
ungefähr so:
Code :1 2 3 4 5 6 7 8 9 10
//Tabelle definieren String[] columnNames = {"Deutsch", "Japanisch"}; String[][] rowData = null; while(rs.next()) { rowData = new String[][]{{rs.getString("deutsch"), rs.getString("japanisch")}}; } JTable table = new JTable(rowData, columnNames); jframe.add(new JScrollPane(table));
nur bekomme ich jetzt in der JTable immer nur den letzten Wert der DB ausgegeben. Wie kann ich es so lösen, das alle Werte in der JTable stehen.
Danke schon mal für jeden Hinweis!
Lg Masterpurzel
-
Das Problem das du hast ist, dass du in der WhileSchleife rowData immer neu setzt. So wird rowData immer und immer wieder überschrieben und schlussendlich bleibt dann natürlich nur das letzte...
Also solltest du rowData vorher setzen und dann das StringArray hochzählen.
Der abgebildete Code hier ist so nicht fehlerfrei lauffähig, da rowData nicht initialisiert wurde.
Wenn du die Größe von rs weißt, dann kannst du rowData wie im Kommentar initialiseren. Man könnte dann auch über eine for schleife nachdenken oder so.. wenn du die größe von rs nie weißt und nicht rausbekommen kannst, was ich irgendwie nicht glaube, dann könnte man alles z.b in eine ArrayListe packen, deren Länge durch 2 teilen(du hast ja immer 2Werte) und schon hättest du die initialisierungsgröße von rowData und dann kannst du die natürlich auch so füllen...
edit: okay, du hast die länge .. dnan kann das hier rausCode java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// Durch die fehlende Initialisierung nicht lauffähig, soll dir aber ne Idee vermitteln!! //Tabelle definieren String[] columnNames = {"Deutsch", "Japanisch"}; String[][] rowData = null; //String[][] rowData = new String[2][rs.length]; // oder size oder count.... ich weiß ja nicht, was rs ist. int index = 0; while(rs.next()) { // 0 Ist ja Spalte Deutsch, 1 Spalte Japanisch rowData[0][index] = rs.getString("deutsch"); rowData[1][index] = rs.getString("japanisch"); index++; } JTable table = new JTable(rowData, columnNames); jframe.add(new JScrollPane(table));
Geändert von Herbertus (10.11.10 um 14:01 Uhr)
-
10.11.10 13:53 #3
Hallo Danke für deine Antwort,
rs ist mein Zeiger auf die DatenbankCode :1
ResultSet rs = s.getResultSet();
mit
Code :1
int columns = rs.getRow();
bekomme ich die Menge heraus!
Leider bekomme ich folgede Ausgabe in der JTable:
richtig sein müsste es:Deutsch Deutsch
Japanisch Japanisch
Deutsch Japanisch
Deutsch Japanisch
Deutsch Japanisch
...
Lg MasterpurzelGeändert von Masterpurzel (10.11.10 um 13:57 Uhr)
-
10.11.10 13:57 #4
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
du hast jetzt zwei Möglichkeiten, wie du vorgehen kannst.
Wenn die die Anzahl der rows und die anzahl der columns vor der Iteration bekannt sind, kannst du entweder ein Array oder eine ArrayList mit diesen größen (columnLength und rowLength) anlegen.
Wenn die Anzahl der rows und die Anzahl der columns vor der Iteration nicht bekannt sind, solltest du eine LinkedList verwenden.
Ich empfehle dir auch den Zugriff auf die Datenbank innerhalb des TableModel zu kapseln, dann ist der Grad der Kopplung von der GUI an die Datenbank niedriger. Du könntest das Model dann durch den Konstruktor mit Daten aus der Datenbank befüllen (Model und DB müssen syncronisiert werden) oder immer bei einem getValue() eine entsprechende Abfrage auf die Datenbank machen (schlechtere Performance).
-
Müsste das aussehen.. ein kleiner Denkfehler von mir ,.. ansonsten musst du mal sehen.. was die Zeile und was die Spalte ist..Code java:
Geändert von Herbertus (10.11.10 um 14:16 Uhr)
-
10.11.10 14:08 #6
Den Tipp von Tikonteroga werde ich mal probieren.
Danke!
Jetzt sieht es so aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
s = conn.prepareStatement("SELECT id, deutsch, japanisch FROM woerterbuch"); s.executeQuery(); ResultSet rs = s.getResultSet(); rs.last(); int columns = rs.getRow(); rowData = new String[columns][columns]; rs.first(); int index = 1; while(rs.next()) { //rowData = new String[][]{{rs.getString("deutsch"), rs.getString("japanisch")}}; rowData[index][0] = rs.getString("deutsch"); rowData[index][1] = rs.getString("japanisch"); index++; }Geändert von Masterpurzel (10.11.10 um 14:13 Uhr)
-
Normal fängt jegliches Feld(Array, egal wieviele Dimensionen) bei 0 an, weshalb auch
sein sollte. Sonst hast du ja ne leere Zeile, oder ?Code java:1
int index = 0
Und du machst dein Feld viel zu groß.. oder hast du genau soviele Zeilen, wie Spalten?
meine ich..solltest du ändern.Code java:1
rowData = new String[columns][columns];
-
10.11.10 14:35 #8
Geändert von Masterpurzel (10.11.10 um 14:41 Uhr)
Ähnliche Themen
-
Array mit Datenbankabfrage füllen und in einer Schleife ausgeben
Von Joe im Forum PHPAntworten: 4Letzter Beitrag: 03.06.10, 21:14 -
Mehrdimensionales Array ausgeben
Von Quests Sohn im Forum PHPAntworten: 3Letzter Beitrag: 15.05.09, 14:59 -
Mehrdimensionales Array füllen/durchsuchen/ausgeben
Von IR-Bastian im Forum PHPAntworten: 10Letzter Beitrag: 28.02.08, 16:46 -
Mehrdimensionales Array an Smarty weitergeben und Ausgeben
Von Elmo im Forum PHPAntworten: 5Letzter Beitrag: 21.10.07, 16:50 -
Array mit Schleife füllen
Von DeLeTeR im Forum PHPAntworten: 3Letzter Beitrag: 18.04.05, 11:49





Zitieren

Login





