jTable mit Datenbankwerten befüllen

Lia

Bekanntes Mitglied
Hi ihr Lieben,

ich habe Datenbank mit einer Tabelle und möchte diese Tabelle in ein jTable in Java mit allen Spalten und Zeilen füllen. " String query =" SELECT * FROM lessons"; ".
Meinen jTable habe ich schon erstellt und es hat 5 Spalten. Ich habe dies versucht:

public Object getValueAt(int rowIndex, int columnIndex) throws SQLException {
ResultSet rs = statement.executeQuery(query);

try {
rs.absolute(rowIndex + 1);
switch (columnIndex) {
case 0:
return rs.getString(1);
case 1:
return rs.getString(2);
case 2:
return rs.getInt(3);
case 3:
return rs.getObject(4).toString();
case 4:
return rs.getObject(5).toString();
default:
return null;
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
..

Und dann die Funktion getValueAt() aufgerufen, aber das alles funktioniert leider nicht.
Danke an alle.
 
Da es nicht erkennbar ist, ob Du JTable überschreibst, vorsichtshalber der Hinweis: mach das nicht, implementiere ein TableModel.

Unabhängig davon stimmt die Signatur nicht: getValueAt wirft keine SQLException. (EDIT: mit "getValueAt" war natürlich JTable#getValueAt bzw. TableModel#getValueAt gemeint)

Außerdem ist es äußerst ungünstig, Datenbankabfragen einfach so in getValueAt zu packen: die Methode wird für jede Zelle aufgerufen.
 
@mihe7 vielen Dank für deine Antwort !! Aber das TableModel habe ich schon implementiert, ich habe diese schon erstellt mit dem

table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"Lessons. Nr", "Name", "Number", "Call"
}
));
scrollPane.setViewportView(table);

oder wie genau meinst du das ? Ich habe nämlich mkit dem window builder die Tabelle "gebaut".
vielen dank
 
in dem Button Click. Ich möchte alle Datensätze in dem jTable anzeigen nachdem der Benutzer auf "anzeigen" geklickt hat
 
Verstehe. Du rufst auf Klick Daten aus der DB ab und willst die JTable damit füllen. Das kann man machen, wenn die Tabelle relativ klein ist.

Da Du ein DefaultTableModel verwendest, sollte es in etwa so funktionieren (Pseudo-Code):

Java:
Vector rowData() throws SQLException {
    try(ResultSet rs = statement.executeQuery(query)) {
        Vector data = new Vector();
        while (rs.next()) {
            Vector row = new Vector();
            row.add(rs.getString(1));
            row.add(rs.getString(2));
            row.add(rs.getInt(3));
            ...
            data.add(row);
        }
        return data;
    }
}
Vector columnData() {
    return new Vector(Arrays.asList("Lessons. Nr", "Name", "Number", "Call"));
}

void reload() {
    DefaultTableModel model = (DefaultTableModel) jTable.getModel();
    model.setDataVector(rowData(), columnData());
}
 
vielen Dank!!

was wäre wenn es doch mhrere Datensätze gibt? oder was meinst du mit wenn die Tabelle klein ist 🙂?
 
Naja, mit der Methode lädst Du alle Datensätze in den Speicher - egal, ob sie angezeigt werden oder nicht. JTable zeigt in der Regel also nur einen Ausschnitt der Daten an. JTable weiß, welche Zeilen und Spalten gerade angezeigt werden müssen und fragt das TableModel via getValueAt(row, col) genau danach. Dein getValueAt() entspricht genau diesem Ansatz, wenn Du es in eine von AbstractTableModel abgleitete Klasse steckst. Das Hauptproblem dabei ist, dass Du die Abfrage jedesmal durchführst, wenn JTable nach einem Wert einer Zelle fragt.
 

Neue Themen


Zurück
Oben