Чтобы добавить недостающие очки здесь, согласно запросу Jaskey
Версия базы данных хранится в SQLite
файле базы данных.
улов это конструктор
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Поэтому, когда вспомогательный конструктор базы данных вызывается с name
(2-й параметр), платформа проверяет, существует ли база данных или нет, и если база данных существует, она получает информацию о версии из заголовка файла базы данных и запускает правильный обратный вызов
Как уже объяснялось в предыдущем ответе, если база данных с таким именем не существует, она срабатывает onCreate
.
Ниже объяснение объясняет onUpgrade
случай с примером.
Скажем, ваша первая версия приложения имела DatabaseHelper
(расширяющуюся SQLiteOpenHelper
) версию с передачей в конструктор as, 1
а затем вы предоставили обновленное приложение с новым исходным кодом, в котором версия была передана как 2
, а затем автоматически при DatabaseHelper
создании платформа запускается onUpgrade
, увидев, что файл уже существует, но версия ниже текущей версии, которую вы прошли.
Теперь предположим, что вы планируете предоставить третью версию приложения с версией db как 3
(версия db увеличивается только тогда, когда требуется изменить схему базы данных). В таких инкрементальных обновлениях вы должны писать логику обновления для каждой версии постепенно для лучшего сопровождения кода.
Пример псевдокода ниже:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Обратите внимание на недостающее break
утверждение в случае 1
и 2
. Это то, что я имею в виду под постепенным обновлением.
Скажем, если старая версия 2
и новая версия 4
, то логика будет обновлять базу данных с 2
до, 3
а затем до4
Если старая версия 3
и новая версия 4
, она будет просто запустить обновления логики 3
в4