根据其他表的自动增量在数据库中填写外键

时间:2016-05-26 17:43:30

标签: java mysql jdbc sql2o

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

patienten:

enter image description here

gebit:

enter image description here

现在我想填写“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();
    }
}

我得到的错误:

enter image description here

我尝试了第二种方法,我在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)

1 个答案:

答案 0 :(得分:1)

您将foreign keygebit.idPatient references patienten.idPatient分开,然后尝试在gebit中插入一条记录idPatient没有匹配patienten.idPatient

您需要查看idPatient insert,查看是否错误;如果是这样,修复错误导致的错误idPatient