如何从结果集中填充 JTable
问题:
您遇到从 ResultSet 填充 JTable 并接收“IllegalStateException”时出现问题错误。
答案:
使用 SwingWorker 和 try-with-resource 语句:
简化代码和利用高级功能,考虑使用 SwingWorker 和 try-with-resource 语句。 SwingWorker 允许在不干扰 GUI 线程的情况下执行后台任务。 try-with-resources 语句确保资源正确关闭。
这里有一个示例:
import java.sql.*; import javax.swing.*; import javax.swing.table.*; public class GUI extends JFrame { // ... (remaining GUI code) private void loadData() { LOG.info("START loadData method"); button.setEnabled(false); try (Connection conn = DriverManager.getConnection(url, usr, pwd); Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery("select * from customer"); ResultSetMetaData metaData = rs.getMetaData(); // Names of columns Vector<String> columnNames = new Vector<>(); int columnCount = metaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { columnNames.add(metaData.getColumnName(i)); } // Data of the table Vector<Vector<Object>> data = new Vector<>(); while (rs.next()) { Vector<Object> vector = new Vector<>(); for (int i = 1; i <= columnCount; i++) { vector.add(rs.getObject(i)); } data.add(vector); } tableModel.setDataVector(data, columnNames); } catch (Exception e) { LOG.log(Level.SEVERE, "Exception in Load Data", e); } button.setEnabled(true); LOG.info("END loadData method"); } }
此代码利用 SwingWorker 在后台执行数据加载。它还利用 try-with-resources 语句来确保连接和语句正确关闭。
请记住将 url、usr 和 pwd 替换为适合您的数据库连接的值。
以上是从结果集中填充 JTable 时如何避免'IllegalStateException”?的详细内容。更多信息请关注PHP中文网其他相关文章!