Maison > Java > javaDidacticiel > Comment remplir une JTable à partir d'un ResultSet en Java et éviter `java.lang.IllegalStateException` ?

Comment remplir une JTable à partir d'un ResultSet en Java et éviter `java.lang.IllegalStateException` ?

DDD
Libérer: 2024-12-01 09:51:13
original
337 Les gens l'ont consulté

How to Populate a JTable from a ResultSet in Java and Avoid `java.lang.IllegalStateException`?

Remplir JTable à partir de ResultSet

L'extrait de code fourni vise à remplir une JTable avec des données extraites d'une base de données à l'aide de ResultSet. Cependant, il rencontre l'erreur suivante :

java.lang.IllegalStateException: SQLite JDBC: inconsistent internal
state
Copier après la connexion

Explorons une approche alternative pour résoudre ce problème et montrons comment créer efficacement un DefaultTableModel à partir de ResultSet.

Création d'un modèle à partir de ResultSet

Le code suivant construit un DefaultTableModel à partir d'un ResultSet à l'aide du buildTableModel method :

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

public class ResultSetTableModel {

    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

Cette méthode extrait les noms de colonnes et les données du ResultSet et renvoie un DefaultTableModel, qui peut ensuite être attribué à une JTable.

Mise à jour du code

Pour utiliser cette méthode, mettez à jour la méthode getnPrintAllData dans votre code comme suit :

public void getnPrintAllData(){
    String name, supplier, id;
    // ...
    try{
        res = statement.executeQuery();
        testResultSet(res);
        DefaultTableModel dtm = ResultSetTableModel.buildTableModel(res);
        gui.jTable1.setModel(dtm);
        // ...
    }
    catch(Exception e){
        // ...
    }
}
Copier après la connexion

Cela devrait résoudre l'erreur et vous permettre de remplir avec succès la JTable avec les données du ResultSet.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal