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

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

Linda Hamilton
Lepaskan: 2024-12-21 09:46:10
asal
498 orang telah melayarinya

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

}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan