Maison >Java >javaDidacticiel >Comment remplir une JTable à partir d'un ResultSet en Java et éviter `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!