#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
Комментариев нет:
Отправить комментарий