Есть две таблицы, в главной таблице есть столбец 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
Нашел ответ на свой вопрос, может кому-то пригодится. Нужно было вставить эту строчку:
db.setForeignKeyConstraintsEnabled(true);
перед
db.update(ObjectDB.dbTab.OBJECT, cv, ObjectDB.objColumn.NAME + " = ?", new String[]{oldName});
и все заработало.
Я применяю немного другой способ. Перегружаю метод SQLiteOpenHelper.onOpen()
@Override
public void onOpen(SQLiteDatabase database) {
super.onOpen(database);
database.execSQL("PRAGMA foreign_keys=ON;");
}
тоже работает, причем метод более универсальный, поскольку setForeignKeyConstraintsEnabled() работает только с API 16
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости