我的老师正在尝试删除学生使用的行。 但是,无论如何我如何删除该行? 如果老师想删除课程,还是应该删除它?
这是我用于删除查询的功能:
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
);
答案 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