Щоб додатково додати сюди відсутні точки, відповідно до запиту Жаскі
Версія бази даних зберігається у SQLite
файлі бази даних.
улов - конструктор
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Отже, коли конструктор помічників бази даних викликається name
(2-й парам), платформа перевіряє, чи існує база даних чи ні, і чи існує база даних, вона отримує інформацію про версію з заголовка файлу бази даних і запускає правий зворотний дзвінок
Як уже було пояснено у попередній відповіді, якщо база даних з іменем не існує, вона спрацьовує onCreate
.
Нижче пояснюється пояснення onUpgrade
випадку з прикладом.
Скажімо, у вашій першій версії програми була DatabaseHelper
(розширена SQLiteOpenHelper
) версія, що передається конструктором, 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