SQLException: ORA-02292: ограничение целостности (SCHOOL.STUDENT_STAGE_FK) нарушено - найдена дочерняя запись - PullRequest
0 голосов
/ 26 ноября 2018

Здесь у меня есть проблема в моем коде, когда я хочу удалить запись: (студент) из базы данных, и я знаю, что есть связанный ключ
, но я не могу решить эту проблему, я попытался удалить студента, который на сцене иэто код:

public int deleteStudentStage(int stdId) //delete student by stId
{
    DatabaseConnection dbconn = new DatabaseConnection();
    Connection conn = dbconn.getConn();
    PreparedStatement pStm = null;
    int rows = 0;
    try
    {
        //String sql = "DELETE FROM STUDENT_STAGE WHERE STUDENT_ID = ? AND STAGE_ID = ?";

        String sql = "DELETE FROM STUDENT WHERE ID = ? ";

        pStm = conn.prepareStatement(sql);

        //fill SQL parameters from student: //
        pStm.setInt(1, stdId);

        // excute //
        rows = pStm.executeUpdate();
    }
    catch (SQLException ex) 
    {
        System.out.println("SQLException: " + ex.getMessage());
    }
     finally
    {
        try {
            conn.commit();
            pStm.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());;
        }
    }
    return rows;
}  

здесь схема

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Вы должны передать Value в предложении where, какой идентификатор учащегося вам нужно удалить.

String sql = "DELETE FROM STUDENT WHERE ID = '"+stdId+"' ";
0 голосов
/ 26 ноября 2018

Сначала вам нужно удалить элементы из дочерней таблицы, у вас даже есть почти правильный запрос для этого.

DELETE FROM STUDENT_STAGE WHERE STUDENT_ID=?

И после этого удалить студента с текущим запросом.

0 голосов
/ 26 ноября 2018

можете ли вы дать больше информации об этом? Обычно это происходит, когда у вас есть ключ foregin, в этом случае таблицы STUDENT, вам нужно сначала удалить все строки в другой таблице, прежде чем удалять STUDENT, вы также можете решить эту проблему.Добавляя удаление на каскаде, когда вы создаете ключ foregin

, вам нужно сделать следующее:

DELETE FROM STUDENT_STAGE WHERE STUDENT_ID=? 
DELETE FROM STUDENT WHERE ID = ? 

также вы можете обновить ключ foregin в таблице для удаления каскада:

ALTER TABLE STUDENT_STAGE DROP FOREIGN KEY STUDENT_STAGE_FK; 
ALTER TABLE STUDENT_STAGE ADD CONSTRAINT STUDENT_STAGE_FK FOREIGN KEY STUDENT_ID REFERENCES STUDENT (ID) ON DELETE CASCADE ON UPDATE CASCADE;

При обновлении ключа foregin, удаляя студента, вы также удаляете всю информацию об этом ученике в таблице STUDENT_STAGE

...