无法删除或更新父行-Java

时间:2018-07-10 20:51:55

标签: java sql database

我的老师正在尝试删除学生使用的行。 但是,无论如何我如何删除该行? 如果老师想删除课程,还是应该删除它?

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

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

2 个答案:

答案 0 :(得分:1)

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

假设您的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();

这应该可以解决您的问题

答案 1 :(得分:1)

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

首先使用

从UserLogin中删除
DELETE FROM UserLogin WHERE Number = ?

然后使用您今天拥有的命令

DELETE FROM lessons WHERE Number = ?

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

相关问题