2015-07-30 4 views
0

im используя SQLite OpenHelper для обработки версии базы данных, и это сработало нормально, моя проблема в том, что если я установил некоторые обновления, а новые пользователи установили мое приложение, то не получит UPGRADES, потому что он будет запускать onCreate с использованием последнего DB_VERSIONSQLite необходимо обновить на FirstRun

объясняющую:

private static final int DB_VERSION = 3; 

Context context; 

public DB(Context c) { 

    super(c, DB_NAME, null, DB_VERSION); 
    context = c; 
} 
    public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE table1..."); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.d("DBUpgrade", "Atualizando DATABASE"); 
     switch (oldVersion) { 
      case 2: { 

      execSQLFromFile(db, "sql2"); 
      } 
    case 3: { 

      execSQLFromFile(db, "sql3"); 
      } 


     } 

сценариев:

пользователя 1 установил с момента выпуска первого приложения -> он получит все обновления

устанавливается в первый раз в его устройстве последний релиз моего APK, который имеет db_version Пользователь 2 3 -> он не получит обновления, только OnCreate

OFC я знаю, почему это происходит но я не знаю, как его решить простым способом, единственный способ, которым я должен был называть onUpgrade(db, 0, DB_VERSION);, это ввести в onUpgrade, но не называть случаи внутри коммутатора. Я не знаю, почему, поскольку я отправляю 0, он должен позвонить case: 2, потому что у меня нет перерыва, не так ли?

но делать это я потерять OnUpgrade для следующей версии, он всегда будет проверять oldVersion и повторить тот же код, так что это будет крах, потому что уникальный столбец, изменять столбцы ничего

так я все еще закончилось без пути OnFirst установки делать обновления слишком установлен в первый раз в его устройстве последний релиз моего APK, который имеет db_version = (

ответ

0

Пользователь 2 3 -> он не получит обновления, только OnCreate

Нет обновлений, так как нет базы данных для обновления. onCreate() должен быть реализован для создания базы данных с соответствующей (последней) схемой.

+0

hmm, я получил, onUpgrade просто думает о пользователях, которые уже имеют базу данных и не хотят потерять данные, поэтому, если я что-то меняю на onUpgrade, я тоже должен изменить onCreate? –

+0

@SenhorObvio: «Так что, если я что-то меняю на onUpgrade, я тоже должен изменить onCreate?» -- да. 'onCreate()' всегда создает самую последнюю структуру базы данных. 'onUpgrade()' применяет изменения к старым структурам базы данных, чтобы они соответствовали самой последней структуре базы данных. – CommonsWare

+0

ОК, я получил его, спасибо –

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