如何從結果集中填充JTable
問題:
您遇到從填充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中文網其他相關文章!