Не могу удалить строку из базы данных - PullRequest
0 голосов
/ 06 января 2019

Я работаю над школьным проектом, и моя работа здесь заключается в том, чтобы сделать кнопку удаления для этого представления списка в 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 голосов
/ 06 января 2019

Я считаю, что проблема в вашей схеме БД. попробуйте исправить зависимости внешних ключей. Я имею в виду, что значение nr_indeksu существует в другой таблице вашей БД.

0 голосов
/ 06 января 2019

У вас есть таблица с именем oceny, в которой есть столбец nr_indeksu, содержащий идентификаторы учеников. Вы создали ограничение внешнего ключа для этой таблицы, которое требует, чтобы идентификаторы учащихся совпадали с чем-то в таблице student.

Если вы попытаетесь удалить что-то в таблице student, на которую ссылается таблица oceny, вы получите эту ошибку, потому что в противном случае она оставит базу данных в состоянии, когда таблица oceny ссылается на студента этого не существует.

Есть несколько решений для этого. Вам нужно будет подумать о том, что на самом деле должно произойти в этом случае - что вы хотите, чтобы происходило со строками oceny при удалении соответствующего ученика.

Один из вариантов - изменить внешний ключ, чтобы он выполнял «каскадное удаление», то есть oceny автоматически удаляется в той же транзакции, что и student. некоторая информация здесь о том, как это сделать.

...