#java #android #sqlite
Есть две таблицы, в главной таблице есть столбец name, который является ключем для дочерней таблицы. Когда я обновляю name, делаю это так: // перезаписываем данные обьекта public static void reloadObject(String oldName, String newName, String description, String date, Context context) { ContentValues cv = new ContentValues(); ObjectDB objectDB = new ObjectDB(context); SQLiteDatabase db = objectDB.getWritableDatabase(); cv.put(ObjectDB.objColumn.NAME, newName); cv.put(ObjectDB.objColumn.DESCRIPTION, description); cv.put(ObjectDB.objColumn.START_DATE, date); db.update(ObjectDB.dbTab.OBJECT, cv, ObjectDB.objColumn.NAME + " = ?", new String[]{oldName}); db.close(); } в дочерней таблице этот столбец не обновляется, хотя в настройках таблицы указано: [object] TEXT REFERENCES geology_object([name]) ON DELETE RESTRICT ON UPDATE CASCADE, Если обновить значение name в программе SQLite Expert Personal то все корректно обновляется. Использую готовую базу данных и вставляю ее в проект с помощью Android SQLiteAssetHelper
Ответы
Ответ 1
Нашел ответ на свой вопрос, может кому-то пригодится. Нужно было вставить эту строчку: db.setForeignKeyConstraintsEnabled(true); перед db.update(ObjectDB.dbTab.OBJECT, cv, ObjectDB.objColumn.NAME + " = ?", new String[]{oldName}); и все заработало.Ответ 2
Я применяю немного другой способ. Перегружаю метод SQLiteOpenHelper.onOpen() @Override public void onOpen(SQLiteDatabase database) { super.onOpen(database); database.execSQL("PRAGMA foreign_keys=ON;"); } тоже работает, причем метод более универсальный, поскольку setForeignKeyConstraintsEnabled() работает только с API 16
Комментариев нет:
Отправить комментарий