表单值将插入数据库中。但是,在获取数据时,除最后两列(结果和等级)外,所有字段都会出现,这取决于其他列的值。
This is the image of tableview
代码如下所示。对于插入:

               btnAddNewStudent.setOnAction(actionEvent ->
                    try {
                Connection connection = null;
                PreparedStatement statement = null;
                ResultSet resultSet = null;
                connection = DB.connectDb();
                connection.setAutoCommit(false);
                String query = "INSERT INTO java2(ID, StudentName, Quiz, A1,A2, Exam,result, grade) VALUES(?, ?, ?, ?,?,?,?,?)";
                statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
                int counter = 1;
                statement.setString(counter++, studentId.getText());
                statement.setString(counter++, studentName.getText());
                statement.setString(counter++, quizMarks.getText());
                statement.setString(counter++, assignmentOneMarks.getText());
                statement.setString(counter++, assignmentTwoMarks.getText());
                statement.setString(counter++, examMarks.getText());

                double totalmarks = Double.parseDouble(quizMarks.getText()) * 0.05
                        + Double.parseDouble(assignmentOneMarks.getText()) * 0.15
                        + Double.parseDouble(assignmentTwoMarks.getText()) * 0.2
                        + Double.parseDouble(examMarks.getText()) * 0.6;

                String grade = "";
                if (totalmarks >= 85 && totalmarks < 100) {
                    grade = "HD";
                } else if (totalmarks >= 75 && totalmarks < 85) {
                    grade = "DI";
                } else if (totalmarks >= 65 && totalmarks < 75) {
                    grade = "CR";
                } else if (totalmarks >= 50 && totalmarks < 65) {
                    grade = "PS";
                } else if (totalmarks > 50) {
                    grade = "Fail";
                }

                statement.setString(counter++, Double.toString(totalmarks));
                statement.setString(counter++, grade);

                statement.executeUpdate();
                connection.commit();
                this.alert("Save", "Successful!", Alert.AlertType.INFORMATION);

                data.clear();


插入部分工作正常,并将值插入数据库表中。

以及用于获取数据的代码

//在表格的单元格中分配数据

    TableColumn name = new TableColumn("Name");
    name.setCellValueFactory(new PropertyValueFactory<>("name"));

    TableColumn id = new TableColumn("Id");
    id.setCellValueFactory(new PropertyValueFactory<>("id"));

    TableColumn quiz = new TableColumn("Quiz");
    quiz.setCellValueFactory(new PropertyValueFactory<>("quiz"));

    TableColumn a1 = new TableColumn("A1");
    a1.setCellValueFactory(new PropertyValueFactory<>("a1"));

    TableColumn a2 = new TableColumn("A2");
    a2.setCellValueFactory(new PropertyValueFactory<>("a2"));

    TableColumn exam = new TableColumn("Exam");
    exam.setCellValueFactory(new PropertyValueFactory<>("exam"));

    TableColumn result = new TableColumn("Results");
    result.setCellValueFactory(new PropertyValueFactory<>("result"));

    TableColumn grades = new TableColumn("Grade");
    grades.setCellValueFactory(new PropertyValueFactory<>("grades"));

    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    //adding all the data in the cell of the table
    table.getColumns().addAll(name, id, quiz, a1, a2, exam, result,grades);
    table.setItems(data);
    Connection connection = null;
    connection = DB.connectDb();
    ResultSet resultSet = connection.createStatement().executeQuery("select * from java2");
    while (resultSet.next()) {
        String studName = resultSet.getString("StudentName");
        String studId = resultSet.getString("ID");

        double quizMark = Double.parseDouble(resultSet.getString("Quiz"));
        double a1mark = Double.parseDouble(resultSet.getString("A1"));
        double a2mark = Double.parseDouble(resultSet.getString("A2"));
        double examMark = Double.parseDouble(resultSet.getString("Exam"));
        double totalmarks=Double.parseDouble(resultSet.getString("result"));
        String grade=resultSet.getString("grade");
        System.out.println(grade);
        data.add(new Student(studName, studId, quizMark, a1mark, a2mark, examMark, totalmarks,
         grade));
    }


下面是学生班的代码

public class Student {
private final String name;
private final String id;
private final double quiz;
private final double a1;
private final double a2;
private final double exam;
private final double result;
private final String grade;


public Student(String name, String id, double quiz, double a1, double a2,
    double exam, double result, String grade) {
    this.name = name;
    this.id = id;
    this.quiz = quiz;
    this.a1 = a1;
    this.a2 = a2;
    this.exam = exam;
    this.result = result;
    this.grade = grade;

}


public String getName() {
    return name;
}

public void setName(String studentName) {
    studentName = this.name;
}

public String getId() {
    return id;
}

public void setId(String studentId) {
    studentId = this.id;
}

public double getQuiz() {
    return quiz;
}

public void setQuiz(double quizMarks) {
    quizMarks = this.quiz;
}

public double getA1() {
    return a1;
}

public void setA1(double assignmentOneMarks) {
    assignmentOneMarks = this.a1;
}

public double getA2() {
    return a2;
}

public void setA2(double assignmentTwoMarks) {
    assignmentTwoMarks = this.a2;
}

public double getExam() {
    return exam;
}

public void setExam(double exam) {
    exam = this.exam;
}

public double getresult() {
    return result;
}

public void setresult(double result) {
    result = this.result;
}

public String getgrade() {
    return grade;
}

public void setgrade(String grade) {
    grade = this.grade;
}

}

最佳答案

结果和等级的getter(和setter)使用所有小写字母命名,这与标准命名约定相反,在常规命名约定中,属性名称应大写。这意味着,当JavaFx找不到这些列所需的方法名称时。

因此,将您的声明替换为:

public double getResult() {
    return result;
}

public void setResult(double result) {
    result = this.result;
}

public String getGrade() {
    return grade;
}

public void setGrade(String grade) {
    grade = this.grade;
}


编辑:
此外,PropertyValueFactory名称也必须匹配:

grades.setCellValueFactory(new PropertyValueFactory<>("grade"));

10-05 22:49