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
DDDoriginal
2024-12-01 09:51:13272parcourir

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

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

    }

}

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){
        // ...
    }
}

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!

Déclaration:
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