Rumah >Java >javaTutorial >Bagaimana untuk Mengisi JTable daripada ResultSet di Java dan Elakkan `java.lang.IllegalStateException`?

Bagaimana untuk Mengisi JTable daripada ResultSet di Java dan Elakkan `java.lang.IllegalStateException`?

DDD
DDDasal
2024-12-01 09:51:13272semak imbas

How to Populate a JTable from a ResultSet in Java and Avoid `java.lang.IllegalStateException`?

Mengisi JTable daripada ResultSet

Coretan kod yang disediakan bertujuan untuk mengisi JTable dengan data yang diambil daripada pangkalan data menggunakan ResultSet. Walau bagaimanapun, ia menghadapi ralat berikut:

java.lang.IllegalStateException: SQLite JDBC: inconsistent internal
state

Mari kita teroka pendekatan alternatif untuk menyelesaikan isu ini dan tunjukkan cara mencipta DefaultTableModel daripada ResultSet dengan berkesan.

Mencipta Model daripada ResultSet

Kod berikut membina DefaultTableModel daripada ResultSet menggunakan kaedah buildTableModel:

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

public class ResultSetTableModel {

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

    }

}

Kaedah ini mengekstrak nama lajur dan data daripada ResultSet dan mengembalikan DefaultTableModel, yang kemudiannya boleh diberikan kepada JTable.

Mengemas kini Kod

Untuk menggunakan kaedah ini, kemas kini kaedah getnPrintAllData dalam kod anda seperti berikut:

public void getnPrintAllData(){
    String name, supplier, id;
    // ...
    try{
        res = statement.executeQuery();
        testResultSet(res);
        DefaultTableModel dtm = ResultSetTableModel.buildTableModel(res);
        gui.jTable1.setModel(dtm);
        // ...
    }
    catch(Exception e){
        // ...
    }
}

Ini sepatutnya menyelesaikan ralat dan membolehkan anda berjaya mengisi JTable dengan data daripada ResultSet.

Atas ialah kandungan terperinci Bagaimana untuk Mengisi JTable daripada ResultSet di Java dan Elakkan `java.lang.IllegalStateException`?. 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