onUpgrade в базе данных sqlite в андроиде
Я разрабатываю приложение базы данных, и я застрял в одном месте.
Сценарий таков: у меня есть база данных, и я поддерживаю версию базы данных. Это то же самое, что и версия приложения.
Сейчас я реализую базу данных в версии 1. В версии 1 создаются 3 таблицы. В версии 2 я обновляю базу данных, добавляя еще одну таблицу. Следовательно, запрос находится в upgrade().
Теперь, что если пользователь установит версию 2. OnUpgrade() не будет вызван, потому что нет базы данных. Следовательно, будет вызываться onCreate(), и в результате будет создано только 3 таблицы.
Я думал о вызове onUpgrade() явно в onCreate(). Но многие разработчики на stackru предложили не вызывать его явно.
Я полностью застрял.
Заранее спасибо.
1 ответ
Я знаю, что это старый пост, вы, конечно, нашли решение, но я нахожу вопрос действительным (проголосовал), и так как он не получил ответа, вот мои 2 цента:
призвание onUpgrade()
от onCreate()
должно работать (я не проверял это), но есть лучший способ организовать вас помощником (см. фрагмент ниже). Ключевым моментом является то, что оба эти метода являются просто точками входа.
public class SampleDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "mydatabase";
private static final int DB_VERSION = 2;
public SampleDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
updateDatabase(db, 0, DB_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
updateDatabase(db, oldVersion, newVersion);
}
private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 1) {
// Create 3 initial tables
}
if (oldVersion < 2) {
// Create the new table
}
}
}
Преимущества этого вида помощника:
- Вам никогда не нужно менять
onCreate()
а такжеonUpgrade()
только методыupdateDatabase()
, - Для каждой новой версии вам просто нужно:
- приращение DB_VERSION
- добавить новый раздел
if (oldVersion < N) { // do the upgrade }
,
Предоставлено: вдохновлено Head First Android Development, Dawn и David Griffiths, O'Reilly, 2015