ResultSet에서 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를 데이터베이스 연결에 적합한 값으로 바꾸는 것을 잊지 마세요.
위 내용은 ResultSet에서 JTable을 채울 때 'IllegalStateException'을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!