Я делаю приложение javafx (intelliJ с java jdk 11), используя SQLite версии 3.30.1 с DB Browser для SQLite. У меня есть таблица под названием «ульи», и у каждого улья могут быть заболевания (хранятся в таблице «болезни»). это моя таблица "ульев":
CREATE TABLE "beehives" (
"number" INTEGER NOT NULL,
"id_apiary" INTEGER NOT NULL DEFAULT -2,
"date" DATE,
"type" TEXT,
"favorite" BOOLEAN DEFAULT 'false',
PRIMARY KEY("number","id_apiary"),
FOREIGN KEY("id_apiary") REFERENCES "apiaries"("id") ON DELETE SET NULL
);
это моя таблица "болезней":
CREATE TABLE "diseases" (
"id" INTEGER NOT NULL,
"id_beehive" INTEGER NOT NULL,
"id_apiary" INTEGER NOT NULL,
"disease" TEXT NOT NULL,
"treatment" TEXT NOT NULL,
"start_treat_date" DATE NOT NULL,
"end_treat_date" DATE,
PRIMARY KEY("id"),
FOREIGN KEY("id_beehive","id_apiary") REFERENCES "beehives"("number","id_apiary") ON UPDATE CASCADE
);
это моя таблица "пасек", если она вам нужна:
CREATE TABLE "apiaries" (
"id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"address" TEXT,
PRIMARY KEY("id")
);
Все работает нормально, но когда я обновляю улей (например, когда я обновляю «число», которое является первичным ключом в таблице ульев), болезни не обновляют номер. В результате болезни отсоединяются, поскольку улей правильно меняет свое «число», но болезнь не обновляет его. Там нет сообщения об ошибке. Мой java метод, который вызывает обновление:
public void updateBeehiveInDB(Beehives newBeehive,Beehives oldBeehive){
try {
s = "UPDATE beehives SET number=?, id_apiary=?, date=?, type=?, favorite=? WHERE number=? and id_apiary=? ";
preparedStatement = connection.prepareStatement(s);
preparedStatement.setInt(1, newBeehive.getNumber());
preparedStatement.setInt(2, newBeehive.getId_apiary());
preparedStatement.setDate(3, newBeehive.getDate());
preparedStatement.setString(4, newBeehive.getType());
preparedStatement.setBoolean(5, newBeehive.isFavorite());
preparedStatement.setInt(6, oldBeehive.getNumber());
preparedStatement.setInt(7,oldBeehive.getId_apiary());
int i = preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
Я пытался проверить, включены ли внешние ключи в соответствии с документацией SQLite здесь , но мой engli sh не хорошо смеяться, и я использую менеджер БД. Поэтому не знаю, как проверить, включено ли это, или как включить его вручную.
Что я могу сделать, чтобы обновить заболевания "id_beehives", когда я обновляю "число" в таблице ульев?