无法从数据库中删除行

时间:2019-01-06 17:53:42

标签: java javafx scenebuilder

我正在某个学校的项目中工作,我的工作是在Java FX中为该列表视图创建一个删除按钮,但是问题是当我继续时,它会向我显示此错误。我尝试了一些解决方案,但没有一个起作用。

所以这是代码

@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`))

此操作的所有要点是关于选择行并在按下按钮后将其从数据库中删除。到目前为止,它仅适用于列表视图,但不能从数据库中删除记录。

任何人都知道如何使其工作?

2 个答案:

答案 0 :(得分:0)

您有一个名为oceny的表,该表具有包含学生ID的列nr_indeksu。您已经在该表上创建了一个外键约束,该约束要求这些学生ID与student表中的某些内容匹配。

如果您尝试删除student表所引用的oceny表中的某些内容,则会出现此错误,因为否则,它将使数据库处于{{1 }}表引用了不存在的学生。

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

一个选项是让您更改外键以使其“级联删除”-也就是说,oceny在与oceny相同的事务中自动被删除。 some information here关于如何做到这一点。

答案 1 :(得分:0)

我相信问题出在您的数据库架构中。尝试修复外键依赖性。我的意思是nr_indeksu的值存在于数据库的另一个表中。