Heim > Java > javaLernprogramm > Wie fülle ich eine JTable aus einem ResultSet und vermeide IllegalStateException?

Wie fülle ich eine JTable aus einem ResultSet und vermeide IllegalStateException?

Linda Hamilton
Freigeben: 2024-12-01 05:40:17
Original
141 Leute haben es durchsucht

How to Populate a JTable from a ResultSet and Avoid IllegalStateException?

JTable aus einem ResultSet füllen

Problembeschreibung

Innerhalb einer GUI-Anwendung stößt ein Benutzer beim Aktualisieren eines DefaultTableModel aus einem ResultSet auf eine IllegalStateException. Das Ziel besteht darin, den Inhalt des ResultSet innerhalb einer JTable anzuzeigen.

Lösung 1

Der folgende Code bietet eine einfache Methode zum Erstellen eines DefaultTableModel aus einem ResultSet:

public static DefaultTableModel buildTableModel(ResultSet rs)
        throws SQLException {

    ResultSetMetaData metaData = rs.getMetaData();

    // Column names
    Vector<String> columnNames = new Vector<>();
    int columnCount = metaData.getColumnCount();
    for (int column = 1; column <= columnCount; column++) {
        columnNames.add(metaData.getColumnName(column));
    }

    // Table data
    Vector<Vector<Object>> data = new Vector<>();
    while (rs.next()) {
        Vector<Object> vector = new Vector<>();
        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
            vector.add(rs.getObject(columnIndex));
        }
        data.add(vector);
    }

    return new DefaultTableModel(data, columnNames);

}
Nach dem Login kopieren

Mit dieser Methode kann die Tabelle wie folgt aufgebaut werden:

JTable table = new JTable(buildTableModel(rs));
Nach dem Login kopieren

Lösung 2 (Verwendung von SwingWorker)

Diese Lösung verwendet einen SwingWorker, um das Laden der Daten in einem separaten Thread durchzuführen und so die Reaktionsfähigkeit der Benutzeroberfläche zu verbessern. Es nutzt auch die Try-with-Resources-Anweisung für ein verbessertes Ressourcenmanagement:

public class GUI extends JFrame {

    // ...

    private void loadData() {
        button.setEnabled(false);

        try (Connection conn = DriverManager.getConnection(url, usr, pwd);
             Statement stmt = conn.createStatement()) {

            ResultSet rs = stmt.executeQuery("select * from customer");
            ResultSetMetaData metaData = rs.getMetaData();

            // ...

            while (rs.next()) {
                // ...
            }

            tableModel.setDataVector(data, columnNames);
        } catch (Exception e) {
            // ...
        }
        button.setEnabled(true);
    }

}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie fülle ich eine JTable aus einem ResultSet und vermeide IllegalStateException?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage