gpt4 book ai didi

java - 不必要的外键约束失败

转载 作者:行者123 更新时间:2023-11-29 18:07:34 24 4
gpt4 key购买 nike

所以我有一个 session 的模拟数据库,我正在其中为作者、论文、审稿人等创建表格。

审阅者提供了一封涉及程序委员会电子邮件的电子邮件。这是我设置的关键约束。然后我将数据添加到 PC 表,然后尝试将数据添加到审阅者表。这是我得到的错误:

Exception encountered com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`sampledb`.`review`, CONSTRAINT `review_ibfk_2` FOREIGN KEY (`email`) REFERENCES `pcmember` (`email`))

以下是其他功能:

public int loadPCMember(){
String tablename = "pcmember";
String create = "CREATE TABLE IF NOT EXISTS pcmember(email VARCHAR(100), name VARCHAR(50), PRIMARY KEY (email));";
makeTable(create);
System.out.println("made table pcmember");
//CSV Reader
String[][] content = CSVReader(tablename,2);

for(int i = 0 ; i < content.length; i++){
try{
String query = "INSERT INTO pcmember(email,name) VALUES (?,?)";
PreparedStatement ps2 = net.prepareStatement(query);
ps2.setString(1, content[i][0]);
ps2.setString(2, content[i][1]);
ps2.executeUpdate();
System.out.println((i+1)+ " done");
// Throw exception
}catch (SQLException e){System.out.println("Exception encountered");return 0;}
}
System.out.println("PC Member Done");
return 1;
}
//Load next
public int loadReview(){
String tablename = "review";
String create = "CREATE TABLE IF NOT EXISTS review(reportid INTEGER, sdate DATE, comment VARCHAR(250), recommendation VARCHAR(6), paperid INTEGER NOT NULL, email VARCHAR(100) NOT NULL, PRIMARY KEY(reportid), FOREIGN KEY (paperid) REFERENCES paper(paperid), FOREIGN KEY(email) REFERENCES pcmember(email));";
makeTable(create);
System.out.println("made table review");
//CSV Reader
String[][] content = CSVReader(tablename,6);

for(int i = 0 ; i < content.length; i++){
System.out.println("" + content[i][0] + "\t" +content[i][1] + "\t" + content[i][2] + "\t" +content[i][3] + "\t" +content[i][4] + "\t" +content[i][5]);
try{
//SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
//java.util.Date date = sdf.parse(content[i][1]);
//System.out.println(""+date);
//Date newDate = new Date(date.getTime());
//System.out.println(""+newDate);
String query = "INSERT INTO review(reportid,sdate,comment,recommendation,paperid,email) VALUES (?,?,?,?,?,?)";
PreparedStatement ps2 = net.prepareStatement(query);
ps2.setInt(1, Integer.parseInt(content[i][0]));
ps2.setDate(2, java.sql.Date.valueOf(content[i][1]));
ps2.setString(3, content[i][2]);
ps2.setString(4, content[i][3]);
ps2.setInt(5, Integer.parseInt(content[i][4]));
ps2.setString(6, content[i][5]);
ps2.executeUpdate();
System.out.println((i+1)+ " done");
// Throw exception
}catch (SQLException e){System.out.println("Exception encountered "+ e);return 0;
}//catch (ParseException e){System.out.println("Parse Exception encountered "+e);}

}
System.out.println("Review Done");
return 1;
}

我对关键限制有很好的理解,并且我非常了解具有相同电子邮件地址的 CSV 文件,那么什么可能导致此错误?

最佳答案

我是一个 SQL 专家,而不是 Java 专家。如果我因此提出任何没有意义的问题或建议 - 你知道为什么。需要明确的是 - 根据该错误消息和您包含的 sql,您似乎试图将一条记录插入到 review 表中,该记录的电子邮件地址在 pcmember 表中不存在,因此违反了外键约束审查表。这似乎是您正在使用的 CVS 的数据问题。但是,既然您提到您对数据文件有信心,那么它是否可能在 pcmember INSERT 成功完成之前尝试将行插入审查表中?

关于java - 不必要的外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699166/

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