ResultSet から JTable を設定する
提供されたコード スニペットは、ResultSet を使用してデータベースから取得したデータを JTable に設定することを目的としています。ただし、次のエラーが発生します:
java.lang.IllegalStateException: SQLite JDBC: inconsistent internal state
この問題を解決する別のアプローチを検討し、ResultSet から DefaultTableModel を効率的に作成する方法を示します。
Creating a Model from 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 で ResultSet から JTable を設定し、「java.lang.IllegalStateException」を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。