2013-11-09 3 views
2

Я разрабатываю приложение базы данных, и я застреваю в одном месте.onUpgrade в базе данных sqlite в android

Сценарий: У меня есть база данных, и я поддерживаю версию базы данных. Это то же самое, что и версия приложения.

Теперь я реализую базу данных в версии 1. В версии 1 создается 3 таблицы. В версии 2 я обновляю базу данных, добавляя еще одну таблицу. Следовательно, запрос находится в обновлении().

Теперь, если пользователь устанавливает версию 2. OnUpgrade() не будет вызван, потому что нет базы данных. Следовательно, будет вызываться onCreate(), и в результате будет создано только 3 таблицы.

Я думал о вызове onUpgrade() явно в onCreate(). Но многие разработчики в stackoverflow предложили не называть его явно.

Я полностью застрял.

Заранее спасибо.

+0

Почему создать 'onCreate' только три таблицы? –

+0

Спасибо за ответ. Это всего лишь пример. Я хочу иметь дело с методом onUpgrade() в моем приложении –

ответ

0

Я знаю, что это старый пост, вы, конечно, нашел решение, но я считаю, вопрос правильный (upvoted) и, поскольку он не получил ответа, вот мои 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, Дон и Дэвид Гриффитс, O'Reilly, 2015

Смежные вопросы