Innerhalb einer GUI-Anwendung stößt ein Benutzer beim Aktualisieren eines DefaultTableModel aus einem ResultSet auf eine IllegalStateException. Das Ziel besteht darin, den Inhalt des ResultSet innerhalb einer JTable anzuzeigen.
Der folgende Code bietet eine einfache Methode zum Erstellen eines DefaultTableModel aus einem ResultSet:
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); }
Mit dieser Methode kann die Tabelle wie folgt aufgebaut werden:
JTable table = new JTable(buildTableModel(rs));
Diese Lösung verwendet einen SwingWorker, um das Laden der Daten in einem separaten Thread durchzuführen und so die Reaktionsfähigkeit der Benutzeroberfläche zu verbessern. Es nutzt auch die Try-with-Resources-Anweisung für ein verbessertes Ressourcenmanagement:
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); } }
Das obige ist der detaillierte Inhalt vonWie fülle ich eine JTable aus einem ResultSet und vermeide IllegalStateException?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!