从 ResultSet 填充 JTable
提供的代码片段旨在使用 ResultSet 从数据库检索的数据填充 JTable。但是,它遇到以下错误:
java.lang.IllegalStateException: SQLite JDBC: inconsistent internal state
让我们探索一种替代方法来解决此问题,并演示如何有效地从 ResultSet 创建 DefaultTableModel。
从以下位置创建模型ResultSet
以下代码使用 ResultSet 从 ResultSet 构建 DefaultTableModel buildTableModel 方法:
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); } }
此方法从 ResultSet 中提取列名和数据并返回 DefaultTableModel,然后可以将其分配给 JTable。
更新代码
要使用此方法,请将代码中的 getnPrintAllData 方法更新为如下所示:
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){ // ... } }
这应该可以解决错误并允许您使用 ResultSet 中的数据成功填充 JTable。
以上是如何从 Java 中的结果集填充 JTable 并避免'java.lang.IllegalStateException”?的详细内容。更多信息请关注PHP中文网其他相关文章!