SQLException:ORA-02292:完整性约束(SCHOOL.STUDENT_STAGE_FK)被违反-找到子记录

时间:2018-11-26 02:09:27

标签: java sql jdbc oracledb

当我想从数据库中删除记录:(学生)并且我知道有一个相关的键时,我的代码中有问题
但是我不能解决这个问题,我试图删除在舞台上的学生,这是代码:

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;
}  

here the schema

3 个答案:

答案 0 :(得分:0)

您能提供有关它的更多信息吗?通常情况下,当您有一个foregin键时,在表STUDENT的情况下,您需要先删除另一个表中的所有行,然后再删除STUDENT,您也可以解决它,在创建前例键时在层叠上添加删除

然后您需要执行以下操作:

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中该学生的所有信息

答案 1 :(得分:0)

首先,您需要从子表中删除元素,对此甚至可以进行正确的查询。

DELETE FROM STUDENT_STAGE WHERE STUDENT_ID=?

在此之后删除具有当前查询的学生。

答案 2 :(得分:-1)

您必须在where子句中传递Value,您需要删除该学生证。

String sql = "DELETE FROM STUDENT WHERE ID = '"+stdId+"' ";