> Java > java지도 시간 > ResultSet에서 JTable을 채우고 IllegalStateException을 방지하는 방법은 무엇입니까?

ResultSet에서 JTable을 채우고 IllegalStateException을 방지하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-01 05:40:17
원래의
140명이 탐색했습니다.

How to Populate a JTable from a ResultSet and Avoid IllegalStateException?

ResultSet에서 JTable 채우기

문제 설명

GUI 애플리케이션 내에서 ResultSet에서 DefaultTableModel을 업데이트할 때 사용자에게 IllegalStateException이 발생합니다. 목표는 JTable 내에 ResultSet의 내용을 표시하는 것입니다.

해결책 1

다음 코드는 ResultSet에서 DefaultTableModel을 생성하는 간단한 방법을 제공합니다.

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);

}
로그인 후 복사

이 방법을 활용하면 테이블은 다음과 같이 구성될 수 있습니다. 다음은 다음과 같습니다.

JTable table = new JTable(buildTableModel(rs));
로그인 후 복사

솔루션 2(SwingWorker 사용)

이 솔루션은 SwingWorker를 사용하여 별도의 스레드에서 데이터 로딩을 수행하여 UI 응답성을 향상시킵니다. 또한 향상된 리소스 관리를 위해 try-with-resources 문을 활용합니다.

public class GUI extends JFrame {

    // ...

    private void loadData() {
        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();

            // ...

            while (rs.next()) {
                // ...
            }

            tableModel.setDataVector(data, columnNames);
        } catch (Exception e) {
            // ...
        }
        button.setEnabled(true);
    }

}
로그인 후 복사

위 내용은 ResultSet에서 JTable을 채우고 IllegalStateException을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿