Rumah >Java >javaTutorial >Bagaimana untuk Mengelakkan 'IllegalStateException' Apabila Mengisi JTable daripada ResultSet?

Bagaimana untuk Mengelakkan 'IllegalStateException' Apabila Mengisi JTable daripada ResultSet?

Linda Hamilton
Linda Hamiltonasal
2024-12-21 09:46:10459semak imbas

How to Avoid

Cara Mengisi JTable daripada ResultSet

Masalah:

Anda sedang alami isu mengisi JTable daripada ResultSet dan menerima Ralat "IllegalStateException".

Jawapan:

Menggunakan SwingWorker dan Pernyataan cuba-dengan-sumber:

Untuk memudahkan kod dan menggunakan ciri lanjutan, pertimbangkan untuk menggunakan SwingWorker dan pernyataan cuba-dengan-sumber. SwingWorker membenarkan tugas latar belakang dilakukan tanpa mengganggu urutan GUI. Pernyataan cuba-dengan-sumber memastikan sumber ditutup dengan betul.

Berikut ialah contoh:

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

}

Kod ini menggunakan SwingWorker untuk melaksanakan pemuatan data di latar belakang. Ia juga memanfaatkan pernyataan cuba-dengan-sumber untuk memastikan sambungan dan pernyataan ditutup dengan betul.

Ingat untuk menggantikan url, usr dan pwd dengan nilai yang sesuai untuk sambungan pangkalan data anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan 'IllegalStateException' Apabila Mengisi JTable daripada ResultSet?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn