Maison > Java > javaDidacticiel > Comment remplir une JTable à partir d'un ResultSet et éviter IllegalStateException ?

Comment remplir une JTable à partir d'un ResultSet et éviter IllegalStateException ?

Linda Hamilton
Libérer: 2024-12-01 05:40:17
original
207 Les gens l'ont consulté

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

Remplir JTable à partir d'un ResultSet

Description du problème

Dans une application GUI, un utilisateur rencontre une IllegalStateException lors de la mise à jour d'un DefaultTableModel à partir d'un ResultSet. L'objectif est d'afficher le contenu du ResultSet dans un JTable.

Solution 1

Le code suivant fournit une méthode simple pour créer un DefaultTableModel à partir d'un 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);

}
Copier après la connexion

En utilisant cette méthode, le tableau peut être construit comme suit :

JTable table = new JTable(buildTableModel(rs));
Copier après la connexion

Solution 2 (en utilisant SwingWorker)

Cette solution utilise un SwingWorker pour effectuer le chargement des données dans un thread séparé, améliorant ainsi la réactivité de l'interface utilisateur. Il utilise également l'instruction try-with-resources pour une gestion améliorée des ressources :

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);
    }

}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal