2016-05-27 2 views
1

мне нужно немного помощи в получении соединения между двумя моими таблицамивнешний ключ всегда остается нулевой

Эти таблицы, где «idPatient является внешним ключом» enter image description here

я заполнить таблицу «танден "как этот

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

Все добавляется красиво, но idPatient остается нулевой

enter image description here

+1

idPatient не включен в число значений вашего запроса INSERT. Вы не укажете его. Ожидаете ли вы получить его автоматически каким-либо образом? –

+0

да, но как я могу его указать – Skupaj

+1

Вам нужно, чтобы пациент встал по крайней мере. Затем, зная его id, используйте его как значение для столбца idPatient в tanden. –

ответ

4

Вы должны указать idPatient в свой insert, если вы хотите установить для него значение. «внешний ключ» не означает, что он будет автоматически задан.

+0

, если я пытаюсь вставить somthing в внешний ключ, я получаю это: Исключение в потоке «AWT-EventQueue-0» org.sql2o.Sql2oException: Ошибка в executeUpdate, Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (' toondoesselaere'.'tanden', CONSTRAINT 'id' FOREIGN KEY (' id') ССЫЛКИ 'patienten' (' idPatient') ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЙ) – Skupaj

1

Вы должны вставить значение столбца idPatient в таблицу танда, взяв из таблицы patienten.

1

Ваша колонка идентификатор в таблице танден должен быть установлен в качестве первичного ключа и Autoincrement, и вы должны установить idPatient в вашей вставке

insert into tanden(idPatient, fdi, voorstelling, toestand) values(:idVal,:fdiVal, :voorstellingVal, :toestandVal)"; 

(idPatient установить в дочерней таблице уже должен существовать в родительская таблица