首页 > 解决方案 > 无法删除或更新父行 - Java

问题描述

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

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

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

标签: javasqldatabase

解决方案


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

这应该可以解决您的问题


推荐阅读