簡體   English   中英

無法從數據庫中刪除行

[英]Can't delete row from a database

我正在某個學校項目中工作,我的工作是在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`))

該操作的全部目的是關於選擇行並在按下按鈕后將其從數據庫中刪除。 到目前為止,它僅適用於列表視圖,但不能從數據庫中刪除記錄。

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

你有一個表稱為oceny其中有一列nr_indeksu包含學生ID。 您已經在該表上創建了一個外鍵約束,該約束要求這些學生ID與student表中的某些內容匹配。

如果嘗試刪除oceny表引用的student表中的oceny ,則會出現此錯誤,因為否則,它將使數據庫處於oceny表引用不存在的學生的狀態。

有許多解決方案。 您將需要考慮在這種情況下實際應該發生的情況-刪除匹配的學生時,對oceny行會發生什么情況。

一種選擇是讓您更改外鍵以使其執行“級聯刪除”-也就是說,在與student相同的事務中oceny自動被刪除。 這里有一些有關如何執行此操作的信息。

我相信問題出在您的數據庫架構中。 嘗試修復外鍵依賴關系。我的意思是nr_indeksu的值存在於數據庫的另一個表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM