zweidimensionales Array anlegen und mit DB-Daten füllen

pappender

Aktives Mitglied
Hallo,

ich habe ein Problem mit einem Array.
Ich möchte ein Array erstellen und es dann mit Daten aus einer Datenbank füllen.
Folgender Codeschnipsel:
Java:
int row = 0;
String[][] tabledata = new String[300][65];
while(rs.next()){
                        tabledata[row][4] = rs.getString("name");
                        row++;
                        tablePlanungModel.addRow(tabledata);
}
Wenn ich die Daten in der Konsole ausgebe, werden die gewünschten Daten angezeigt:
Java:
System.out.println(rs.getString("name"));

In der eigentlichen JTable, in der die Daten stehen sollen, steht lediglich:
[Ljava.lang.String;@9991e3

Was mache ich falsch?
 

pappender

Aktives Mitglied
Oder hier noch mal mit Object:
Java:
               Statement stmt;
                try {
                 
                   String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
                   conn = DriverManager.getConnection(url, user, password);
                 
                    stmt = conn.createStatement();
                    ResultSet rs = stmt.executeQuery("SELECT name FROM ma");
                 
                   rs.first();
                   rs.last();
                   int rowCnt = rs.getRow() + 1;
                   rs.first();
                    Object[][] tabledata = new Object[rowCnt][65];
                    Object[] tableColumnsName = new Object[65];
                 
                    tableColumnsName[0] = "Std";
                    tableColumnsName[1] = "Mitarbeiter";
                    tableColumnsName[2] = "AZ-Verteilung";
                    int z = 3;
                    for(int i = 1; i <= 31; i++){
                        tableColumnsName[z] = (i + ".");
                        tableColumnsName[z + 1] = ("real");
                        z = z + 2;
                    }
                    tablePlanungModel.setColumnIdentifiers(tableColumnsName);
                 
                    while(rs.next()){
                        System.out.println(rs.getString("name"));
                       tabledata[rs.getRow()][4] = rs.getString("name");
                        tablePlanungModel.addRow(tabledata);
                    }
                 
                 
                    rs.close();
                    stmt.close();
                    conn.close();
                 
               }
               catch (SQLException sqle) {
                  JOptionPane.showMessageDialog(null, "SQLException: " + sqle.getMessage() + "\nSQLState: " + sqle.getSQLState() + "\nVendorError: " + sqle.getErrorCode());
               }
Aber auch hier steht in der Tabelle: [Ljava.lang.Object;@9991e3
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

"[Ljava.lang.String;@9991e3" ist die Referenz des tablePlanungModel !!
Du solltest schon einen einzelnen String mit tabledata[n][m] übergeben ...

Aber benötigst Du wirklich ein Stringarray mit 19500 Einträgen??
Zudem: bei mehr als 300 Strings bekommst Du eine IndexOuitOfBounds-Exception !!

Gruß Klaus
 

pappender

Aktives Mitglied
Hallo,

Danke für den Hinweis.
Naja, es werden wohl bis zu 300 Zeilen und 65 Spalten sein.

Ich habe es jetzt mit Vector gelöst:
Java:
                    while(rs.next()){
                       Vector<String> tabledata = new Vector<String>();
                       tabledata.add(rs.getString("ma_name"));
                       tablePlanungModel.addRow(tabledata);
                    }
 

JStein52

Top Contributor
Du solltest schon einen einzelnen String mit tabledata[n][m] übergeben ...
Sollte er dem Model nicht immer eine ganze Zeile übergeben (also 65 Spalten)? Deshalb sollte tabledata
auch nur ein eindimensionales Array sein das die Daten für eine Zeile aufnimmt. Und ich nehme an der Code oben ist nur ein Ausshnitt weil du nur in Spalte 4 einen Namen einfügst ?

Edit: ok, zu spät
 

Jardcore

Top Contributor
Ich würde dir empfehlen keinen Vector zu benutzten, außer du willst etwas synchronisiert ablaufen lassen. In vielen Fällen möchte man das aber nicht und man verliert Performance. Die ArrayList kann das gleiche wie ein Vector hat jedoch den Vorteil das die nicht synchronisiert wird.

Wenn man nach Vector vs ArrayList googlet erhält man noch weitere und bessere Erklärungen. :)
 

JStein52

Top Contributor
Ich würde dir empfehlen keinen Vector zu benutzten
Er hat das sicher so gemacht weil bei addRow ein Vector angegeben werden kann. Aber ich weiss nicht warum er es sich so schwer macht. Da es sich bei ihm ja scheinbar um eine Tabelle mit 65 Spalten vom Typ String handelt könnte er ja ganz einfach ein

"String[] tabledata = new String[65]" anlegen und seine Daten da rein schreiben. Und so sieht dann das
hinzufügen zum Model aus:

"tablePlanungModel.addRow(tabledata);"

Der ursprüngliche Fehler war ja nur dass tabledata zweidimensional war.
 

pappender

Aktives Mitglied
Na ich bin Neuling in Java und objektorientiert, das muss ich mir noch alles bisl im Kopf zurecht rücken.

Der Hintergrund ist Folgender:
Daten sollen aus einer Tabelle gelesen werden. Das dürften so ca. 20.000 Zellen werden, aber das variiert.
In der Tabelle möchte ich die Daten ändern können: Hinzufügen, Ändern und sogar das Löschen soll möglich sein. Nach Abschluss sollen die geänderten Zellen wieder in die Datenbank geschrieben werden. Vielleicht lasse ich die Veränderung auch sofort nach Verlassen der Zelle in der Datenbank speichern, das weiß ich noch nicht, was am effektivsten ist, ich werde beide Varianten testen.

Jedenfalls wollte das mit dem zweidimensionalen Array machen, damit ich jede Zelle ansprechen kann: Zeile, Spalte wie im Koordinatensystem.
 

JStein52

Top Contributor
Heisst das du wolltest dir die Daten ausserhalb der Tabelle noch einmal halten ? Du kannst das schon machen aber dann musst du beim addRow(...) eben die Zeilennummer mit angeben und nicht einfach die ganzen "tabledata".

Edit: aber bei deiner Vector-Lösung hast du das ja auch nicht so gemacht. Ein Vector steht doch für eine Zeile
 

pappender

Aktives Mitglied
Oh sorry, ich meinte die Daten kommen aus einer Datenbanktabelle (MySQL).
Die Daten sollen in der JTable manipuliert werden können und dann geht’s wieder zurück in die Datenbank.

Also anscheinend seht Ihr es so, das Vector wohl nicht so das richtige dafür ist. Dann werde ich es wieder auf Array ändern.
Ich werde mir sowieso noch mal das Thema Vector vs ArrayList genauer anschauen.
 

Jardcore

Top Contributor
Wenn du eine Liste verwendest, die String[]-Arrays verwendet, kannst du damit deine Spalten und Zeilen Abbilden;
Java:
List<String[]> tabelle= new ArrayList<String[]>();
for(String[] zeile : tabelle) {
    for(String zelle : zeile) {
        // Inhalt ausgeben
    }
}

Die Liste musst du dann natürlich noch befüllen.

Die Abbildung ist dann dein Datenmodel (Model) und die JTable ist die Darstellung der Daten (View). Die beiden musst du dann noch geeignet verbinden.

Wenn du nun die Daten manipulieren willst wird das zugrundelegende Datenmodel verändert.
 

JStein52

Top Contributor
Table und TableModel bewerkstelligen ja gerade die Trennung von Daten und Anzeige. Da heisst er schreibt seine Daten in das TableModel Und gibt der Table das TableModel bekannt. Insofern braucht er doch nicht nochmal eine ArrayList um sich die Daten ausserdem nochmal zu merken. Das TableModel bietet ja Zugriffsmethoden auf die Daten. Verändert werden sie im TableModel und von da aus liest er sie wieder zur Speicherung in der Datenbank aus. Und so wie ich seinen ursprünglichen Code deute hatte er doch schon alles er hat die Daten nur nicht richtig in sein TableModel geschrieben.
 

Jardcore

Top Contributor
Ich kenne mich leider mit Swing nicht so aus, deswegen ist mir das TableModel nicht bekannt, wenn es so eine Trennung schon gibt, dann kann mein Post ignoriert werden.

Wieso wird nun eine Array Vector ArrayList dann überhaupt benötigt. Dann kann man doch einfach direkt in das TableModel schreiben?
 

JStein52

Top Contributor
Also um dir mal eine Vorlage zu geben, ich würde deinen ursprünglichen Code wie folgt ändern und dann sollte das funktionieren:

Code:
               Statement stmt;
                try {
                
                   String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
                   conn = DriverManager.getConnection(url, user, password);
                
                    stmt = conn.createStatement();
                    ResultSet rs = stmt.executeQuery("SELECT name FROM ma");
                
                   rs.first();
                   rs.last();
                   int rowCnt = rs.getRow() + 1;
                   rs.first();
                    Object[] tabledata = new Object[65];
                    Object[] tableColumnsName = new Object[65];
                
                    tableColumnsName[0] = "Std";
                    tableColumnsName[1] = "Mitarbeiter";
                    tableColumnsName[2] = "AZ-Verteilung";
                    int z = 3;
                    for(int i = 1; i <= 31; i++){
                        tableColumnsName[z] = (i + ".");
                        tableColumnsName[z + 1] = ("real");
                        z = z + 2;
                    }
                    tablePlanungModel.setColumnIdentifiers(tableColumnsName);
                
                    while(rs.next()){
                        System.out.println(rs.getString("name"));
                       tabledata[4] = rs.getString("name");
                        tablePlanungModel.addRow(tabledata);
                    }
                
                
                    rs.close();
                    stmt.close();
                    conn.close();
                
               }
               catch (SQLException sqle) {
                  JOptionPane.showMessageDialog(null, "SQLException: " + sqle.getMessage() + "\nSQLState: " + sqle.getSQLState() + "\nVendorError: " + sqle.getErrorCode());
               }
 

JStein52

Top Contributor
Dann kann man doch einfach direkt in das TableModel schreiben?
Ganz genau !!

Edit: Das TableModel hat Methoden um ganze Zeilen, ganze Spalten, einzelne Werte mit Zeilen- und Spaltenangabe zu lesen und zu schreiben. Und es bewerkstelligt u.a. im Zusammenspiel mit Table auch die Koordination der Reihenfolge der Daten in den Zeilen, insbesondere wenn du die Elemente nach einzelnen Spalten umsortierst. Dann wird nur die Anzeige umsortiert. Nicht die Daten im Model und man braucht eine Zuordnung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
Yasemin bahar zweidimensionales Array Java Basics - Anfänger-Themen 5
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
I Java zweidimensionales array befüllen mit for-schleife Java Basics - Anfänger-Themen 2
J zweidimensionales Array Java Basics - Anfänger-Themen 1
S Zweidimensionales Array in ein eindimensionales Array speichern Java Basics - Anfänger-Themen 6
J Zweidimensionales array kopieren und in eindimensionales überführen Java Basics - Anfänger-Themen 304
X Java zweidimensionales Array Java Basics - Anfänger-Themen 5
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
F Erste Schritte zweidimensionales array Java Basics - Anfänger-Themen 2
J Erste Schritte zweidimensionales Array Muster befüllen. Java Basics - Anfänger-Themen 4
K drei eindimensionale Arrays in ein zweidimensionales Array Java Basics - Anfänger-Themen 10
K Zweidimensionales Array erstellen und zufällig mit 0 und 1 füllen Java Basics - Anfänger-Themen 11
W Erste Schritte Zweidimensionales Array - Gerade Zahlen anzeigen lassen Java Basics - Anfänger-Themen 3
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
C ZweiDimensionales Array erstellen und Spiegeln Java Basics - Anfänger-Themen 1
H zweidimensionales array füllen Java Basics - Anfänger-Themen 6
D Zweidimensionales Array ( Java Basics - Anfänger-Themen 2
D Zweidimensionales Array (Länge) Java Basics - Anfänger-Themen 2
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
M Zweidimensionales Array um 1 addieren Java Basics - Anfänger-Themen 3
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
C Methoden Diagonalen am best. Punkt im zweidimensionales array finden Java Basics - Anfänger-Themen 3
S Zweidimensionales Array mit Diagonalen Java Basics - Anfänger-Themen 9
M Zugriffsproblem auf (zweidimensionales) Array in einer ArrayList Java Basics - Anfänger-Themen 15
C Datentypen Zweidimensionales Array mit String und int Java Basics - Anfänger-Themen 3
W Datentypen Zweidimensionales Boolean Array Java Basics - Anfänger-Themen 13
A Zweidimensionales Array Java Basics - Anfänger-Themen 3
M Zweidimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
C zweidimensionales Array sortieren Java Basics - Anfänger-Themen 6
B Zweidimensionales Array durchsuchen und ändern Java Basics - Anfänger-Themen 8
J Zweidimensionales Array durch ToString ausgeben lassen Java Basics - Anfänger-Themen 21
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
M Zweidimensionales Array befüllen Java Basics - Anfänger-Themen 4
C Zweidimensionales String Array initialisieren Java Basics - Anfänger-Themen 2
S Zweidimensionales Array mit Schleife summieren Java Basics - Anfänger-Themen 2
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
F Datentypen Zweidimensionales Array füllen Java Basics - Anfänger-Themen 6
S zweidimensionales ARRAY Java Basics - Anfänger-Themen 2
S zweidimensionales Array Java Basics - Anfänger-Themen 6
berti99 Zweidimensionales Array befüllen Java Basics - Anfänger-Themen 5
U Zweidimensionales Array mit Eindimensionalem Array Java Basics - Anfänger-Themen 7
J zweidimensionales Array einselen und ausgeben Java Basics - Anfänger-Themen 15
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
M Zweidimensionales Array Java Basics - Anfänger-Themen 3
G zweidimensionales Array vergrößern Java Basics - Anfänger-Themen 3
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
J zweidimensionales Array Java Basics - Anfänger-Themen 3
M Zweidimensionales String-Array initialisieren Java Basics - Anfänger-Themen 6
P zweidimensionales Array erstellen Java Basics - Anfänger-Themen 9
D erste spalte eines zweidimensionales Array sortieren ??!! Java Basics - Anfänger-Themen 2
N zweidimensionales 10x10 Feld erstellen Java Basics - Anfänger-Themen 3
D aus 2 arrays ein zweidimensionales formen Java Basics - Anfänger-Themen 9
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
V Zweidimensionales Ganzzahlfeld Java Basics - Anfänger-Themen 7
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben