На рабочем столе Linux, когда я пытался,
connection = DriverManager.getConnection("jdbc:sqlite:/path/to/test.db;foreign keys=true;");
sqlite3 (3.7.13) думал, что моя база данных файл была / path / to / test.db; внешние ключи = true .Это привело к странной, но, по-моему, правильной ошибке: таблица не существует
См. , как решить проблему отсутствия такой таблицы при вставке исключения в базу данных sqlite
Я думал, что исправил обе эти проблемы, вставив выражение внешнего ключа в свойство, подобное следующему:
private final Properties connectionProperties = new Properties();
connectionProperties.setProperty("PRAGMA foreign_keys", "ON");
private final String connectionString = String.format("jdbc:sqlite:%s", absolute_path_to_sqlite_db);
Connection connection = DriverManager.getConnection(connectionString, connectionProperties);
Но даже если проблема с именем базы данных была решена, SQLite все еще разрешал ограничениенарушения.Еще немного лапши с драйвером Xerial, и вот что наконец сработало:
private final Properties connectionProperties = new Properties();
SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(true);
connectionProperties = config.toProperties();
private final String connectionString = String.format("jdbc:sqlite:%s", absolute_path_to_sqlite_db);
Connection connection = DriverManager.getConnection(connectionString, connectionProperties);