JavaFX TableView mit Daten aus der Datenbank füllen?
Hey Leute,
ich versuche gerade meine Tabelle mit Daten aus der Datenbank zu füllen aber dabei bekomme ich eine Fehlermeldung. Kann mir jemand dabei helfen?
Users Klasse:
public class Users {
private int id;
private String userToken;
private String firstname;
private String lastname;
private String emailAddress;
private String creationTime;
private Button deleteButton;
public Users(int id, String userToken, String firstName, String lastName, String emailAddress, String creationTime) {
this.id = id;
this.userToken = userToken;
this.firstname = firstName;
this.lastname = lastName;
this.emailAddress = emailAddress;
this.creationTime = creationTime;
}
}
Die Fehlermeldung:
UserController:
public class UserController {
@FXML
private TableColumn<Users, Integer> idCol;
@FXML
private TableColumn<Users, String> creationTimeCol;
@FXML
private TableColumn<Users, String> emailCol;
@FXML
private TableColumn<Users, String> firstnameCol;
@FXML
private TableColumn<Users, String> lastnameCol;
@FXML
private TableColumn<Users, String> deleteCol;
@FXML
private TableColumn<Users, String> userTokenCol;
@FXML
private TableView<Users> table;
@FXML
private TextField textField;
public void printUser() {
ObservableList<Users> allUserList = FXCollections.observableArrayList();
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:2020/database", "root", "");
System.out.println("Connected");
//PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM usertable");
ResultSet resultSet = connection.createStatement().executeQuery("SELECT * FROM usertable");
while (resultSet.next()) {
allUserList.add(new Users(Integer.parseInt(resultSet.getString("id")),
resultSet.getString("userToken"), resultSet.getString("firstName"),
resultSet.getString("lastName"), resultSet.getString("emailAddress"),
resultSet.getString("creationTime")));
}
} catch (SQLException ignored) {
ignored.printStackTrace();
}
idCol.setCellValueFactory(new PropertyValueFactory<Users, Integer>("id"));
userTokenCol.setCellValueFactory(new PropertyValueFactory<Users, String>("userToken"));
firstnameCol.setCellValueFactory(new PropertyValueFactory<Users, String>("firstName"));
lastnameCol.setCellValueFactory(new PropertyValueFactory<Users, String>("lastName"));
emailCol.setCellValueFactory(new PropertyValueFactory<Users, String>("emailAddress"));
creationTimeCol.setCellValueFactory(new PropertyValueFactory<Users, String>("creationTime"));
table.setItems(allUserList);
System.out.println("all user got");
}
}
2 Antworten
Wo wird denn printUsers aufgerufen?
Ist die .fxml Datei korrekt angelegt?
Deine UserController-Instanz hat so keine Bindung zu einer View. Hole sie dir vom FXMLLoader.
UserController controller = (UserController) fxmlLoader.getController();
Danke für die Antwort.
Das hat mir ein bisschen weitergeholfen aber ich bekomme jetzt eine andere Fehlermeldung:
java.lang.NullPointerException: Cannot invoke "controller.settingController.UserController.printUser()" because "controller" is null
at Main.start(Main.java:23)
at javafx.graphics@18-ea/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
at javafx.graphics@18-ea/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
at javafx.graphics@18-ea/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@18-ea/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
at javafx.graphics@18-ea/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics@18-ea/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@18-ea/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:833)
Hast du denn im Root-Element deiner FXML den Controller definiert?
In deiner FXML-Datei muss es ein TableColumn-Element mit einer ID idCol geben. Ohne deren Existenz kann kein Element auf dein Feld idCol gemappt werden.
Die wird in der Main Klasse aufgerufen:
Ja