无法删除或更新父行 - Java

Posted

技术标签:

【中文标题】无法删除或更新父行 - Java【英文标题】:Cannot delete or update a parent row - Java 【发布时间】:2018-07-10 20:51:55 【问题描述】:

我的老师正在尝试删除学生使用的行。 但是我怎么能删除这一行呢? 如果老师想删除这节课,无论如何都应该删除它?

这是我用于删除查询的功能:

con = DriverManager.getConnection ("jdbc:mysql://localhost:3307/lessons","root","");
String query = "DELETE FROM lessons WHERE Number= ?";
PreparedStatement pst = con.prepareStatement(query);
pst.setString(1,txtFieldNumber.getText());
pst.executeUpdate();

.

CREATE TABLE UserLogin(
   Number INTEGER,
   UserNumberINTEGER,
   FOREIGN KEY (Number) REFERENCES termin(Number),
   FOREIGN KEY (UserNumber) REFERENCES User(UserNumber)
);

CREATE TABLE lessons(
   Number INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
   LName VARCHAR(20)
);

CREATE TABLE User(
   Name VARCHAR (20),
   UserNUmber INTEGER NOT NULL PRIMARY KEY
);

【问题讨论】:

请添加更多上下文 @PankajGadge 更多上下文是什么意思 你的NUMBER专栏int有没有机会? @naveenmarri 是的,它是一个整数,它是一个主键 lessons 表的声明在哪里,您所指的父表是哪一个? 【参考方案1】:

您必须使用 Number 参数的相同值以正确的顺序执行 2 次单独的删除。

首先从 UserLogin 中删除

DELETE FROM UserLogin WHERE Number = ?

然后使用你今天的命令

DELETE FROM lessons WHERE Number = ?

如果您想确保两个语句都能正确执行,您可以使用手动提交 like this

【讨论】:

【参考方案2】:

当基础列为int时,您不能使用setString

假设您的txtFieldNumber.getText() 返回String 格式的数字,请尝试以下操作

pst.setInt(1,Integer.parseInt(txtFieldNumber.getText()));

更新:

根据您的问题编辑,您似乎首先尝试删除 lessons 中的主键,该主键在 UserLogin 表中被引用。这就是您遇到错误的原因。

要克服这个问题,您可能需要先删除UserLogin 表中的行,然后删除lessons 表中的相应行。

String query = "DELETE FROM UserLogin WHERE Number= ?";
PreparedStatement pst = con.prepareStatement(query);
pst.setInt(1,Integer.parseInt(txtFieldNumber.getText()));
pst.executeUpdate();

String query2 = "DELETE FROM lessons WHERE Number= ?";
pst = con.prepareStatement(query2);
pst.setInt(1,Integer.parseInt(txtFieldNumber.getText()));
pst.executeUpdate();

这应该可以解决您的问题

【讨论】:

谢谢。但这是否适用于无法删除更新父行的问题? “不能删除更新父行”是什么意思?我给出的解决方案有效吗? 我正在尝试删除学生使用的行。但是,如果老师想删除该行,无论如何都应该为学生删除它。如果此时尝试删除该行,我收到消息“无法删除更新父行”:/ 我们需要lessons 表和引用该表​​上列的constraints 的表结构(列),然后我们才能知道您为什么无法delete 特定记录. 您首先需要delete 被引用的行,然后delete 父行。我猜你需要两个表中的两个delete 语句到delete

以上是关于无法删除或更新父行 - Java的主要内容,如果未能解决你的问题,请参考以下文章

无法删除或更新父行:Laravel

无法删除或更新父行:外键约束失败

spring boot:无法删除或更新父行:外键约束失败

Laravel SQLSTATE[23000] 无法删除或更新父行:外键约束失败

Laravel 关于删除完整性约束违规:1451 无法删除或更新父行:外键约束失败

TypeORM/MySQL:无法删除或更新父行:外键约束失败