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
455 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!

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