无法从数据库中删除行

Can't delete row from a database

我在某个学校项目中工作,我的工作是在 Java FX 中为该列表视图制作一个删除按钮,但问题是当我想继续时,它会显示这个错误。我尝试了一些解决方案,但其中 none 有效。

所以这是代码

@FXML
private void removeStudentOnClick(ActionEvent event) throws IOException, SQLException{
    ModelEditStudent student=(ModelEditStudent)tables.getSelectionModel().getSelectedItem();
    String sql="DELETE FROM student WHERE nr_indeksu=?";

    Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    alert.setTitle("Usuwanie studenta");
    alert.setHeaderText(null);
    alert.setContentText("Czy na pewno chcesz usunąc tego studenta z listy?");
    Optional <ButtonType> action = alert.showAndWait();

    if(action.get() == ButtonType.OK){

    tables.getItems().removeAll(tables.getSelectionModel().getSelectedItem());  

    try{

        try (Connection myConn = ConnectionManager.getConnection()) {
         try (PreparedStatement st = myConn.prepareStatement(sql)) {
            st.setString(1, student.getNr_indeksu());
            st.executeUpdate();
        }
        myConn.close();

    }

    }catch (SQLException e){
        System.out.println(e);
    }
}

出现错误:

 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
 Cannot delete or update a parent row: a foreign key constraint fails
 (`wu`.`oceny`, CONSTRAINT `oceny_ibfk_3` FOREIGN KEY (`nr_indeksu`)
 REFERENCES `student` (`nr_indeksu`))

此操作的所有要点都是关于选择行并在按下按钮后从数据库中删除。现在它只适用于列表视图,但不会从数据库中删除记录。

有人知道它是如何工作的吗?

您有一个名为 oceny 的 table,其中有一列 nr_indeksu 包含学生 ID。您已经在 table 上创建了一个外键约束,这要求这些学生 ID 与 student table.

中的内容相匹配

如果您尝试删除 student table 中被 oceny table 引用的内容,您将收到此错误,否则,它将离开数据库处于 oceny table 引用不存在的学生的状态。

对此有多种解决方案。您需要考虑在这种情况下实际应该发生什么 - 当您删除匹配的学生时,您希望 oceny 行发生什么。

您可以选择更改外键以使其执行 "cascade delete" - 也就是说,oceny 在与 student 相同的事务中自动删除. some information here 介绍了如何做到这一点。

我认为问题出在您的数据库架构中。尝试修复外键 dependencies.I 意味着 nr_indeksu 的值存在于您数据库的另一个 table 中。