Попытка заполнить табличное представление javafx элементами из базы данных
Элементы из моей базы данных не заполняют TableView, который я создал, используя javafx. Я создал метод с именем checkDB() и реализовал его для проверки доступа к базе данных, и он дает положительный результат, но главная проблема заключается в том, что мой TableView не заполнен элементами базы данных.
Ниже приведены классы, которые отвечают за менеджер баз данных...
Модель:
package com.org.databases;
import javafx.beans.property.StringProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class Employee {
private final StringProperty employee_First_Name=new
SimpleStringProperty(this,"empFirstName", null);
private final StringProperty employee_Last_Name=new
SimpleStringProperty(this, "empLastName", null);
private final IntegerProperty employee_ID=new
SimpleIntegerProperty(this, "empID", 0);
public Employee(int id, String first_name, String last_name) {
employee_First_Name.set(first_name);
employee_Last_Name.set(last_name);
employee_ID.set(id);
}
}
Программа доступа к данным:
package com.org.databases;
import java.sql.*;
import javafx.collections.ObservableList;
import java.util.Date;
public class EmployeeDao {
String user;
String password;
Connection conn;
PreparedStatement statement;
ResultSet rs;
String query;
public String getUsername() {
return user;
}
public String getPassword() {
return password;
}
public void createConnection(String db_url, String user, String password) {
this.user=user;
this.password=password;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(db_url, getUsername(), getPassword());
System.out.println("Connected to the database");
}
catch (SQLException | ClassNotFoundException s) {
}
}
public void populate(ObservableList<Employee> empList) {
try {
query="SELECT * FROM persons";
statement=conn.prepareStatement(query);
rs=statement.executeQuery();
while (rs.next()) {
empList.add(new Employee(rs.getInt("id"), rs.getString("first_name"), rs.getString("last_name")));
}
}
catch (Exception e) {
}
}
public void insert(int id, String firstName, String lastName, Date joinDate) {
try {
query="INSERT INTO persons VALUES("+id+", "+firstName+", "+lastName+", "+joinDate+")";
statement=conn.prepareStatement(query);
rs=statement.executeQuery();
}
catch(Exception ex) {
}
}
public void closeConnection() {
try {
conn.close();
statement.close();
rs.close();
}
catch (Exception ex) {
}
}
public void checkDb() {
try {
query="SELECT * FROM persons";
statement=conn.prepareStatement(query);
rs=statement.executeQuery(query);
while (rs.next()) {
int id=rs.getInt("id");
String firstName=rs.getString("first_name");
String secondName=rs.getString("last_name");
Date joinDate=rs.getDate("join_date");
System.out.println(firstName+" "+secondName+" "+joinDate);
}
}
catch (Exception e) {
}
}
}
Вид:
package com.org.databases;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.TableCell;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
import javafx.scene.Scene;
import javafx.collections.*;
import javafx.scene.image.*;
import javafx.geometry.Pos;
public class EmployeeMainview {
EmployeeDao eDao=new EmployeeDao();
ObservableList<Employee> empList=FXCollections.<Employee>observableArrayList();
TableView<Employee> empTable=new TableView<>(empList);
TableColumn idCol=new TableColumn("ID");
TableColumn firstNameCol=new TableColumn("FIRST NAME");
TableColumn lastNameCol=new TableColumn("LAST NAME");
Tab insertTab=new Tab("Add Employee");
Tab updateTab=new Tab("Update Employee Details");
Tab deleteTab=new Tab("Delete Employee");
TabPane tPane=new TabPane();
TextField firstNameField=new TextField();
TextField lastNameField=new TextField();
TextField idField=new TextField();
Label fName=new Label("First Name");
Label lName=new Label("Last Name");
Label idLbl=new Label("Id");
Label jDateLbl=new Label("Join Date");
Label updatefNameLabel=new Label("First Name");
Label updatelNameLabel=new Label("Last Name");
Label updateIdLabel=new Label("Id");
Label deleteIdLabel=new Label("Id");
DatePicker datePicker=new DatePicker();
Button addBtn=new Button("Add");
Button updateBtn=new Button("Update");
Button deleteBtn=new Button("Delete");
//Delete
TextField deleteById=new TextField();
//Update
TextField updateById=new TextField();
TextField updateFirstName=new TextField();
TextField updateLastName=new TextField();
//Pane with insert items
GridPane insertPane=new GridPane();
//Pane with update items
GridPane updatePane=new GridPane();
//Pane with delete items
GridPane deletePane=new GridPane();
// Vbox with update
VBox updateBox=new VBox();
//Vbox with insert
VBox insertBox=new VBox();
//Vbox with delete
VBox deleteBox=new VBox();
//Main Pane
HBox root=new HBox();
//Border pane for tabs
BorderPane tabBorderPane=new BorderPane();
//Border pane for table view
BorderPane tableBorderPane=new BorderPane();
//The Scene
Scene scene=null;
//The stage
Stage stage=new Stage();
public EmployeeMainview() {
}
public void instantiateParameters() {
idCol.setCellValueFactory(new PropertyValueFactory<>("empID"));
idCol.setCellFactory(col -> {
TableCell<Employee, Integer> cell=new TableCell<Employee, Integer>() {
@Override
public void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);
this.setText(null);
this.setGraphic(null);
if (!empty) {
this.setText(""+item);
}
}
};
return cell;
});
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("empFirstName"));
firstNameCol.setCellFactory(col -> {
TableCell<Employee, String> cell=new TableCell<Employee, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
this.setText(null);
this.setGraphic(null);
if (!empty) {
this.setText(item);
}
}
};
return cell;
});
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("empLastName"));
lastNameCol.setCellFactory(col -> {
TableCell<Employee, String> cell=new TableCell<Employee, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
this.setText(null);
this.setGraphic(null);
if (!empty) {
this.setText(item);
}
}
};
return cell;
});
empTable.getColumns().addAll(idCol, firstNameCol, lastNameCol);
Image insert=new Image(getClass().getResource("addicon.jpg").toExternalForm());
ImageView insertImg=new ImageView(insert);
Image update=new Image(getClass().getResource("updateicon.jpg").toExternalForm());
ImageView updateImg=new ImageView(update);
Image delete=new Image(getClass().getResource("deleteicon.jpg").toExternalForm());
ImageView deleteImg=new ImageView(delete);
insertImg.setFitHeight(10.0);
insertImg.setFitWidth(10.0);
updateImg.setFitHeight(10.0);
updateImg.setFitWidth(10.0);
deleteImg.setFitHeight(10.0);
deleteImg.setFitWidth(10.0);
insertTab.setGraphic(insertImg);
updateTab.setGraphic(updateImg);
deleteTab.setGraphic(deleteImg);
insertPane.add(idLbl, 0, 4);
insertPane.add(idField, 1, 4);
insertPane.add(fName, 0, 5);
insertPane.add(firstNameField, 1, 5);
insertPane.add(lName, 0, 6);
insertPane.add(lastNameField, 1, 6);
insertPane.add(jDateLbl, 0, 7);
insertPane.add(datePicker, 1, 7);
insertPane.setAlignment(Pos.CENTER);
insertPane.setHgap(5);
insertPane.setVgap(5);
insertBox.getChildren().addAll(insertPane, addBtn);
insertBox.setSpacing(20);
insertBox.setAlignment(Pos.CENTER);
insertTab.setContent(insertBox);
updatePane.add(updateIdLabel, 0, 0);
updatePane.add(updateById, 1, 0);
updatePane.add(updatefNameLabel, 0, 1);
updatePane.add(updateFirstName, 1, 1);
updatePane.add(updatelNameLabel, 0, 2);
updatePane.add(updateLastName, 1, 2);
updatePane.setHgap(5);
updatePane.setVgap(5);
updatePane.setAlignment(Pos.CENTER);
updateBox.setSpacing(20);
updateBox.setAlignment(Pos.CENTER);
updateBox.getChildren().addAll(updatePane, updateBtn);
updateTab.setContent(updateBox);
deletePane.add(deleteIdLabel, 0, 0);
deletePane.add(deleteById, 1, 0);
deletePane.setHgap(5);
deletePane.setAlignment(Pos.CENTER);
deleteBox.getChildren().addAll(deletePane, deleteBtn);
deleteBox.setAlignment(Pos.CENTER);
deleteBox.setSpacing(20);
deleteTab.setContent(deleteBox);
tPane.getTabs().addAll(insertTab, updateTab, deleteTab);
tPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
tabBorderPane.setTop(tPane);
tableBorderPane.setCenter(empTable);
root.getChildren().addAll(tabBorderPane, tableBorderPane);
scene=new Scene(root, 640, 400);
empList.add(new Employee(10, "King", "Dee"));
empList.add(new Employee(12, "Rose", "Paul"));
empTable.getItems().add(new Employee(18, "Ryan", "Kay"));
scene.getStylesheets().addAll(getClass().getResource("data_styles.css").toExternalForm());
stage.setScene(scene);
stage.setResizable(false);
}
}
Форма входа:
package com.org.databases;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.application.Platform;
import javafx.stage.StageStyle;
import javafx.geometry.Pos;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.*;
public class EmployeeLoginGUI extends Application {
EmployeeDao eDao=new EmployeeDao();
EmployeeMainview view=new EmployeeMainview();
@Override
public void start(Stage stage) {
TextField usernameFld=new TextField();
PasswordField pFld=new PasswordField();
Text exit=new Text("X");
Label databaseLabel=new Label("DATABASE MANAGER");
Circle circleNode=new Circle(6.9);
Button loginBtn=new Button("LOGIN");
Image userImg=new Image(getClass().getResource("th.jpg").toExternalForm());
ImageView usrImgView=new ImageView(userImg);
Image passImg=new Image(getClass().getResource("th-4.jpg").toExternalForm());
ImageView passImgView=new ImageView(passImg);
AnchorPane root=new AnchorPane();
GridPane pane=new GridPane();
usernameFld.setPrefWidth(250);
pFld.setPrefWidth(250);
usernameFld.setPrefHeight(50);
pFld.setPrefHeight(50);
usernameFld.setPromptText("Enter Username");
exit.setWrappingWidth(10.7);
exit.setStyle("-fx-font-weight: bold; -fx-fill: #ffffff;");
exit.setOnMousePressed(e -> {
Platform.exit();
});
loginBtn.setOnAction(e -> {
eDao.createConnection("jdbc:mysql://localhost:3306/employee", usernameFld.getText(), pFld.getText());
eDao.checkDb();
stage.hide();
view.stage.show();
view.instantiateParameters();
});
databaseLabel.setEffect(new DropShadow());
databaseLabel.setAlignment(Pos.CENTER);
loginBtn.getStyleClass().add("loginbutton");
databaseLabel.getStyleClass().add("databaseLabel");
usrImgView.setFitHeight(20.0);
usrImgView.setFitWidth(20.0);
passImgView.setFitHeight(20.0);
passImgView.setFitWidth(20.0);
pane.add(usrImgView, 2, 0);
pane.add(usernameFld, 4, 0);
pane.add(passImgView, 2, 1);
pane.add(pFld, 4, 1);
pane.setVgap(5);
pane.setAlignment(Pos.CENTER);
circleNode.setFill(Color.ORANGE);
root.getChildren().addAll(circleNode, exit, databaseLabel, pane, loginBtn);
AnchorPane.setLeftAnchor(databaseLabel, 100.0);
AnchorPane.setTopAnchor(databaseLabel, 50.0);
AnchorPane.setRightAnchor(databaseLabel, 100.0);
AnchorPane.setTopAnchor(pane, 100.0);
AnchorPane.setRightAnchor(pane, 10.0);
AnchorPane.setLeftAnchor(pane, 10.0);
AnchorPane.setTopAnchor(exit, 0.0);
AnchorPane.setRightAnchor(exit, 0.0);
AnchorPane.setTopAnchor(circleNode, 0.0);
AnchorPane.setRightAnchor(circleNode, 0.0);
AnchorPane.setTopAnchor(loginBtn, 220.0);
AnchorPane.setRightAnchor(loginBtn, 150.0);
AnchorPane.setLeftAnchor(loginBtn, 150.0);
Scene scene=new Scene(root, 400, 400, Color.TRANSPARENT);
scene.getStylesheets().addAll(getClass().getResource("data_styles.css").toExternalForm());
stage.setScene(scene);
stage.initStyle(StageStyle.UNDECORATED);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}