我有两张桌子。第一个患者表具有一个自动增量ID。
一个“患者”具有多个“ gebit”。 idPatient是两个表中的外键。

患者:

java - 根据其他表的自动增量在数据库中填充外键-LMLPHP

gebit:

java - 根据其他表的自动增量在数据库中填充外键-LMLPHP

现在,我想填写“ gebit”表,但我不断出错。

我的代码:

public void addTandenToDatabase(int fdi, String voorstelling, String toestand) {
    String insertSql = "insert into gebit(fdi, voorstelling, toestand) values (:fdiVal, :voorstellingVal, :toestandVal)";
    try (Connection con = sql2o.open()) {
        con.setRollbackOnException(false);
        con.createQuery(insertSql)
                .addParameter("fdiVal", fdi)
                .addParameter("voorstellingVal", voorstelling)
                .addParameter("toestandVal", toestand)
                .executeUpdate();
    }
}


我得到的错误:

java - 根据其他表的自动增量在数据库中填充外键-LMLPHP

我尝试了第二种方法,在gebit中向idPatient添加一个值:

public void addTandenToDatabase(int fdi, String voorstelling, String toestand) {
    String insertSql = "insert into gebit(idPatient, fdi, voorstelling, toestand) values (:idVal, :fdiVal, :voorstellingVal, :toestandVal)";
    try (Connection con = sql2o.open()) {
        con.setRollbackOnException(false);
        con.createQuery(insertSql)
                .addParameter("fdiVal", fdi)
                .addParameter("idVal", fdi)
                .addParameter("voorstellingVal", voorstelling)
                .addParameter("toestandVal", toestand)
                .executeUpdate();
    }
}


但这给了我这个错误:

Error in executeUpdate, Cannot add or update a child row: a foreign key constraint fails (`toondoesselaere`.`gebit`, CONSTRAINT `idPatient` FOREIGN KEY (`idPatient`) REFERENCES `patienten` (`idPatient`) ON DELETE NO ACTION ON UPDATE NO ACTION)

最佳答案

您将foreign key破坏为gebit.idPatient references patienten.idPatient,然后尝试使用gebit没有匹配的idPatient将记录插入patienten.idPatient

您需要查看要idPatientinsert并查看是否不正确。如果是这样,请修复导致错误的idPatient错误。

10-08 12:01