我试图做的是,当我单击Add按钮时,它将创建另一个实例,其中有一个QUERY,它将与数据库交互,添加我从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,如果你们想知道为什么我有一个外键,我有一个外键所以,如果我删除行,其他表中的所有其他行都将被删除,但它不起作用。
答案 0 :(得分:1)
以下是我可以从你的问题中假设的表格。
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将对您设置的外部约束执行检查。在那里,它检查idpersonal_info
表的idusers
字段中是否存在users
的值。由于您没有为idpersonal_info
指定值,因此MySQL可以采用NULL
或idpersonal_info
的自动递增值,MySQL将采用哪一个,我不确定。如果它需要NULL
,那么它将不在users
表上,因此违反了外键约束。如果它采用auto_incremented值,则有可能它不会出现在users
表中,如果不存在,则违反外键约束。
现在,我能想到的解决方案是,您必须在idpersonal_info
查询中指定INSERT
的值。您必须确保users
表中也存在。
希望有所帮助:)