tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Tikonteroga
  • 1 Beitrag von Herbertus
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
1971
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    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
     

  2. #2
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    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...
    Code 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));
    edit: okay, du hast die länge .. dnan kann das hier raus
    Geändert von Herbertus (10.11.10 um 14:01 Uhr)
     

  3. #3
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Hallo Danke für deine Antwort,

    rs ist mein Zeiger auf die Datenbank
    Code :
    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:

    Deutsch Deutsch
    Japanisch Japanisch
    richtig sein müsste es:

    Deutsch Japanisch
    Deutsch Japanisch
    Deutsch Japanisch
    ...

    Lg Masterpurzel
    Geändert von Masterpurzel (10.11.10 um 13:57 Uhr)
     

  4. #4
    Tikonteroga Tikonteroga ist offline Mitglied Gold
    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).
    Masterpurzel bedankt sich. 

  5. #5
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
        //Tabelle definieren
          String[] columnNames = {"Deutsch", "Japanisch"};
          String[][] rowData = new String[2][rs.getRow()]; // ich war ma so frei
          int index = 0;
           
          while(rs.next()) {
              rowData[index][0] = rs.getString("deutsch");
              rowData[index][1] = rs.getString("japanisch");
              index++;
          }
    Müsste das aussehen.. ein kleiner Denkfehler von mir ,.. ansonsten musst du mal sehen.. was die Zeile und was die Spalte ist..
    Geändert von Herbertus (10.11.10 um 14:16 Uhr)
     

  6. #6
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    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)
     

  7. #7
    Herbertus Herbertus ist offline Mitglied Bronze
    Registriert seit
    Sep 2010
    Beiträge
    37
    Normal fängt jegliches Feld(Array, egal wieviele Dimensionen) bei 0 an, weshalb auch
    Code java:
    1
    
    int index = 0
    sein sollte. Sonst hast du ja ne leere Zeile, oder ?

    Und du machst dein Feld viel zu groß.. oder hast du genau soviele Zeilen, wie Spalten?
    Code java:
    1
    
     rowData = new String[columns][columns];
    meine ich..solltest du ändern.
    Masterpurzel bedankt sich. 

  8. #8
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Zitat Zitat von Herbertus Beitrag anzeigen
    Normal fängt jegliches Feld(Array, egal wieviele Dimensionen) bei 0 an, weshalb auch
    Code java:
    1
    
    int index = 0
    sein sollte. Sonst hast du ja ne leere Zeile, oder ?

    Und du machst dein Feld viel zu groß.. oder hast du genau soviele Zeilen, wie Spalten?
    Code java:
    1
    
     rowData = new String[columns][columns];
    meine ich..solltest du ändern.
    Danke für den Tipp, werde ich noch ändern!

    PS: bei int index = 0 habe ich zum Schluss eine leere Zeile, aber der erste Eintrag fehlt!

    Sonst passt alles

    €dit: jetzt passt alles, war ein Fehler in der SQL Clausel!

    Danke für die promte und nette Hilfe!
    Geändert von Masterpurzel (10.11.10 um 14:41 Uhr)
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 03.06.10, 21:14
  2. Mehrdimensionales Array ausgeben
    Von Quests Sohn im Forum PHP
    Antworten: 3
    Letzter Beitrag: 15.05.09, 14:59
  3. Antworten: 10
    Letzter Beitrag: 28.02.08, 16:46
  4. Antworten: 5
    Letzter Beitrag: 21.10.07, 16:50
  5. Array mit Schleife füllen
    Von DeLeTeR im Forum PHP
    Antworten: 3
    Letzter Beitrag: 18.04.05, 11:49

Stichworte