当我想从数据库中删除记录:(学生)并且我知道有一个相关的键时,我的代码中有问题
但是我不能解决这个问题,我试图删除在舞台上的学生,这是代码:
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;
}
答案 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+"' ";