Heim >Java >javaLernprogramm >Wie fülle ich eine JTable aus einem ResultSet in Java und vermeide „java.lang.IllegalStateException'?

Wie fülle ich eine JTable aus einem ResultSet in Java und vermeide „java.lang.IllegalStateException'?

DDD
DDDOriginal
2024-12-01 09:51:13327Durchsuche

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

JTable aus ResultSet füllen

Das bereitgestellte Code-Snippet zielt darauf ab, eine JTable mit Daten zu füllen, die mithilfe von ResultSet aus einer Datenbank abgerufen wurden. Es tritt jedoch der folgende Fehler auf:

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

Lassen Sie uns einen alternativen Ansatz zur Lösung dieses Problems untersuchen und zeigen, wie Sie effektiv ein DefaultTableModel aus ResultSet erstellen können.

Erstellen eines Modells aus ResultSet

Der folgende Code erstellt ein DefaultTableModel aus einem ResultSet unter Verwendung des buildTableModel Methode:

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

    }

}

Diese Methode extrahiert Spaltennamen und Daten aus dem ResultSet und gibt ein DefaultTableModel zurück, das dann einer JTable zugewiesen werden kann.

Aktualisierung des Codes

Um diese Methode zu verwenden, aktualisieren Sie die getnPrintAllData-Methode in Ihrem Code als folgt:

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){
        // ...
    }
}

Dies sollte den Fehler beheben und es Ihnen ermöglichen, die JTable erfolgreich mit Daten aus dem ResultSet zu füllen.

Das obige ist der detaillierte Inhalt vonWie fülle ich eine JTable aus einem ResultSet in Java und vermeide „java.lang.IllegalStateException'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn