gpt4 book ai didi

java - 带查询的 Actionevent 不起作用

转载 作者:行者123 更新时间:2023-11-29 14:38:43 24 4
gpt4 key购买 nike

我想做的是,当我单击“添加”按钮时,它将创建另一个实例,其中该实例内部有一个查询,它将与数据库交互,以添加我从 JTextFields 获得的输入,然后我还有另一个问题,它一直给我一个

m.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException

这是我的操作事件代码

private class AddHandler implements ActionListener {
public void actionPerformed(ActionEvent event) {

Personal personal = new Personal(firstTxt.getText(),miTxt.getText(),
lastTxt.getText(),dob.getText(),maritalTxt.getText(),beneTxt.getText());
Contact contact = new Contact(telTxt.getText(),addTxt.getText(),
mobTxt.getText(),emailTxt.getText());
Employee employee = new Employee(posTxt.getText(),payTTxt.getText(),payRTxt.getText(),hireTxt.getText());

Finance finance = new Finance();

finance.addEmployee(personal,contact,employee);


}
}

我的 addEmployee 代码

public void addEmployee(Personal p ,Contact c,Employee e) {
Connection conn = Jdbc.dbConn();
Statement statement = null;
String insert1 = "INSERT INTO personal_info (`First_Name`, `Middle_Initial`, `Last_Name`, `Date_Of_Birth`, `Marital_Status`, `Beneficiaries`) VALUES ('"+p.getFirstName()+"', '"+p.getMiddleInitial()+"'" +
" , '"+p.getLastName()+"', '"+p.getDateOfBirth()+"', '"+p.getMaritalStatus()+"', '"+p.getBeneficiaries()+"')";
try{
statement = conn.createStatement();
statement.executeUpdate(insert1);
statement.close();
conn.close();
JOptionPane.showMessageDialog(null, "Employee Added!!");
}catch(Exception ex){
ex.printStackTrace();
}


}

这里是错误列表

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`finalpayroll`.`personal_info`, CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`idpersonal_info`) REFERENCES `users` (`idusers`) ON DELETE CASCADE ON UPDATE CASCADE)

如果你们想知道为什么我有外键,是我添加了一个外键,它的外键是 idUsers,如果你们想知道为什么我有外键,我有一个外键,所以,如果我删除行,其他表中的所有其他行都将被删除,但它不起作用。

最佳答案

以下是我可以根据您的问题假设的表格。

users          -- idusers, other fields
personal_info -- idpersonal_info, First_Name, Middle_Initial, Last_Name,
Date_Of_Birth, Marital_Status, Beneficiaries

我假设以下关系:

idusers         - primary key
idpersonal_info - foreign key referencing idusers,
also, it is set to ON DELETE CASCADE, ON UPDATE CASCADE

You had set it as primary key with AUTO_INCREMENT also.

来自维基百科Foreign Key :

The values in one row of the referencing columns 
must occur in a single row in the referenced table.

如果我正确理解了您的表结构,那么我得出以下结论。

您正在向 personal_info 表中插入一条新记录,但省略了 idpersonal_info 的值,因为它是主要的且auto_increment。现在,在插入行之前,MySQL 将对您设置的外部约束执行检查。在那里,它检查users 表的idusers 字段中是否存在idpersonal_info 的值。由于您没有为 idpersonal_info 指定值,MySQL 可以采用 NULLidpersonal_info 的自动递增值,将采用哪一个by MySQL 是我不确定。如果它采用NULL,那么它将不会出现在users 表上,因此违反了外键约束。如果它采用 auto_incremented 值,则它有可能不会出现在 users 表中,如果不存在,则违反外键约束。

现在,我能想到的解决方案是,您还必须在 INSERT 查询中为 idpersonal_info 指定一个值。您必须确保 users 表中也存在该信息。

希望有帮助:)

关于java - 带查询的 Actionevent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com