Я считаю, что ваша проблема связана с методом onCreate . Он работает ТОЛЬКО при создании базы данных, он не запускается при каждом запуске приложения.
Самое простое решение, при условии, что вам не нужно хранить какие-либо существующие данные, - это либо удалить данные приложения, либо удалить приложение. После выполнения любого из них снова запустите приложение, и новая таблица будет создана при запуске метода onCreate .
Более того, бесполезно включать FOREIGN KEYS в методе onCreate. ИНОСТРАННЫЕ КЛЮЧИ должны быть включены при каждом запуске приложения. Чтобы исправить это, переопределите метод onConfigure , а затем используйте db.setForeignKeyConstraintsEnabled(true);
- , это просто удобная альтернатива использованию
db.execSQL("PRAGMA FOREIGN_KEYS = ON;");
, поэтому, если вы предпочитаете, вы можете использовать это припереопределяя метод onConfigure.
например, добавьте этот метод в класс RestaurantDBHelper: -
@Override
public void onConfigure(SQLiteDatabase db) {
super.onConfigure(db);
db.setForeignKeyConstraintsEnabled(true);
}
Однако , у вас возникнут проблемы при попытке добавитьзаметки, поскольку дочерний элемент будет установлен на ноль, и, следовательно, они не будут связью / картой / ассоциацией / ссылкой между добавленной заметкой и рестораном.
Вам необходимо использовать что-то вроде: -
public long addNote(String note, long restaurantId) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NOTES,note);
values.put(COLUMN_NOTES_ID,restaurantId);
return db.insert(TABLE_NAME_NOTES,null,values);
}
НО тогда у вас может возникнуть проблема с определением идентификатора ресторана.
НО тогда вы можете столкнуться с еще одной проблемой в этомВы можете иметь только одну заметку на ресторан, так как столбец, используемый для ссылки на ресторан, определен как INTEGER PRIMARY KEY и, следовательно, является столбцом UNIQUE (одно и то же значение можно использовать только один раз (исключение - ноль, поскольку ноль - cсчитается уникальным для другого нулевого значения)).
Если требование для одной заметки для ресторана не требуется, то для отдельной таблицы нет необходимости в отношении один к одному , поэтомузначение может быть сохранено в таблице ресторанов.
Если вы хотите, чтобы в ресторане было несколько примечаний ( отношение один ко многим ), то вам не следует делать столбец INTEGER PRIMARY KEY, INTEGER будет достаточно,Тогда несколько заметок могут ссылаться на один и тот же ресторан.
Если вы хотите, чтобы заметка могла быть применена к нескольким ресторанам, вы бы использовали третью таблицу сопоставления / строки / ссылки / ассоциативные (другое имя, вероятно, также существует). Такая таблица будет иметь две колонки, одна для ссылки на ресторан, а другая для ссылки на заметку. Тогда у вас будет отношение много ко многим между ресторанами и примечаниями (примечание может использоваться многими ресторанами, а ресторан может использовать много примечаний).
Вы можете найти The3 типа отношений в разработке базы данных полезно.