Maison > Java > javaDidacticiel > Comment éviter « IllegalStateException » lors du remplissage d'une JTable à partir d'un ResultSet ?

Comment éviter « IllegalStateException » lors du remplissage d'une JTable à partir d'un ResultSet ?

Linda Hamilton
Libérer: 2024-12-21 09:46:10
original
544 Les gens l'ont consulté

How to Avoid

Comment remplir une JTable à partir d'un ResultSet

Problème :

Vous rencontrez problèmes de remplissage d'une JTable à partir d'un ResultSet et de réception d'une "IllegalStateException" erreur.

Réponse :

Utilisation d'un SwingWorker et d'instructions try-with-resource :

Pour simplifier le code et utilisez des fonctionnalités avancées, envisagez d'utiliser un SwingWorker et l'instruction try-with-resource. Le SwingWorker permet d'effectuer des tâches en arrière-plan sans interférer avec le thread de l'interface graphique. L'instruction try-with-resources garantit que les ressources sont correctement fermées.

Voici un exemple :

import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;

public class GUI extends JFrame {

    // ... (remaining GUI code)

    private void loadData() {
        LOG.info("START loadData method");

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

            // Names of columns
            Vector<String> columnNames = new Vector<>();
            int columnCount = metaData.getColumnCount();
            for (int i = 1; i <= columnCount; i++) {
                columnNames.add(metaData.getColumnName(i));
            }

            // Data of the table
            Vector<Vector<Object>> data = new Vector<>();
            while (rs.next()) {
                Vector<Object> vector = new Vector<>();
                for (int i = 1; i <= columnCount; i++) {
                    vector.add(rs.getObject(i));
                }
                data.add(vector);
            }

            tableModel.setDataVector(data, columnNames);
        } catch (Exception e) {
            LOG.log(Level.SEVERE, "Exception in Load Data", e);
        }
        button.setEnabled(true);

        LOG.info("END loadData method");
    }

}
Copier après la connexion

Ce code utilise un SwingWorker pour effectuer le chargement des données en arrière-plan. Il exploite également l'instruction try-with-resources pour garantir que la connexion et l'instruction sont correctement fermées.

N'oubliez pas de remplacer url, usr et pwd par les valeurs appropriées pour votre connexion à la base de données.

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!

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