【问题标题】:Cannot delete or update a parent row - Java无法删除或更新父行 - 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 表的声明在哪里,您所指的父表是哪一个?

标签: java sql database


【解决方案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
    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2017-06-11
    相关资源
    最近更新 更多