1. О onCreate () и onUpgrade ()
onCreate(..)
вызывается всякий раз, когда приложение только что установлено. onUpgrade
вызывается всякий раз, когда приложение обновляется и запускается, и версия базы данных не совпадает.
2. Увеличение версии БД
Вам нужен такой конструктор, как:
MyOpenHelper(Context context) {
super(context, "dbname", null, 2); // 2 is the database version
}
ВАЖНО: Одного увеличения версии приложения недостаточно для вызова onUpgrade
!
3. Не забывайте своих новых пользователей!
Не забудьте добавить
database.execSQL(DATABASE_CREATE_color);
для вашего метода onCreate (), а также для недавно установленных приложений будет отсутствовать таблица.
4. Как бороться с несколькими изменениями базы данных с течением времени
Если у вас есть последовательные обновления приложений, в некоторых из которых есть обновления базы данных, вы обязательно должны проверить oldVersion
:
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
db.execSQL(DATABASE_CREATE_color);
// we want both updates, so no break statement here...
case 2:
db.execSQL(DATABASE_CREATE_someothertable);
}
}
Таким образом, когда пользователь обновляется с версии 1 до версии 3, он получает оба обновления. Когда пользователь обновляется с версии 2 до 3, он просто получает обновление версии 3 ... В конце концов, вы не можете рассчитывать на 100% своей пользовательской базы для обновления каждый раз, когда вы выпускаете обновление. Иногда они пропускают обновление или 12:)
5. Держите ваши номера ревизий под контролем при разработке
И наконец ... звонит
adb uninstall <yourpackagename>
полностью удаляет приложение. При повторной установке вы гарантированно нажмете onCreate
, что удерживает вас от необходимости увеличивать версию базы данных в стратосферу по мере разработки ...