Hi,
ich fülle eine TableView mit Daten aus einer DB.
Das ganze läuft auch gut solange ich keine Daten abrufen die mehr Spalten hat als die Vorherige.
Beispiel:
1. Abfrage hat 30 Spalten. Das Ergebnis wird angezeigt.
2. Abfrage hat 16 Zeilen. Wenn ich diese starte kommt:
Wenn ich zuerst die mit 16 Zeilen Ausführe und dann die mit 30 kommt kein Fehler.
Hier der Code der Methode in der der Fehler passiert:
ich fülle eine TableView mit Daten aus einer DB.
Das ganze läuft auch gut solange ich keine Daten abrufen die mehr Spalten hat als die Vorherige.
Beispiel:
1. Abfrage hat 30 Spalten. Das Ergebnis wird angezeigt.
2. Abfrage hat 16 Zeilen. Wenn ich diese starte kommt:
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 16, Size: 16
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
Wenn ich zuerst die mit 16 Zeilen Ausführe und dann die mit 30 kommt kein Fehler.
Hier der Code der Methode in der der Fehler passiert:
Java:
public void buildData() {
// tableview1.getItems().clear();
data = FXCollections.observableArrayList();
System.out.println("index: " + data.indexOf(c));
// System.out.println("index: " + row.indexOf(row));
try {
c = DB._DB_Connection.getConnection();
System.out.println("real SQL: " + SQL);
ResultSet rs = c.createStatement().executeQuery(SQL);
TableColumn col = new TableColumn();
// data.clear();
/* TABLE COLUMN ADDED DYNAMICALLY */
for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
//We are using non property style for making dynamic table
final int j = i;
col = new TableColumn(rs.getMetaData().getColumnName(i + 1));
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString());
}
});
int rowNr = i + 1;
System.out.println("Column [" + rowNr + "] " + rs.getMetaData().getColumnName(rowNr));
tableview1.getColumns().addAll(col);
}
/* Data added to ObservableList */
//int zeile = 1; // Wert für ExcelExport
while (rs.next()) {
row = FXCollections.observableArrayList();
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
Object o = rs.getObject(i);
row.add(o == null ? "" : o.toString()); // wenn ein NULL Value gefunden wird, wird dieser durch "" ersetzt
}
data.addAll(row);
}
tableview1.setItems(data);
ausgabe1.setText("" + data.size());
System.out.println("Anzahl der Zeilen: " + data.size());
System.out.println("index: " + data.indexOf(data));
System.out.println("indexTableView: " + data.indexOf(tableview1));
System.out.println("index: " + row.indexOf(row));
// Rechtsklick in TableView initialisieren!
RechtsKlickMenue();
rs.close();
c.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error on Building Data");
}
}