Search code examples
androiddatabasesqlitegreendao

Upgrading database using my OpenHelper in greendao


I use GreenDao as my ORM. I want migrate schema from oldversion to new version. I use this link to implement my mygration. So I wrote my own OpenHelper class and put it to another package. I Implement onUpgrade method like this:

public class UpgradeHelper extends OpenHelper {

public UpgradeHelper(Context context, String name, CursorFactory factory) {
    super(context, name, factory);
}

/**
 * Apply the appropriate migrations to update the database.
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.i("greenDAO", "My Upgrade Helper -------- Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
    switch (newVersion) {
    case 2:
        new MigrateV1ToV2().applyMigration(db, oldVersion);
        break;
    case 3:
        new MigrateV2ToV3().applyMigration(db, oldVersion);
        break;
    default:
        return;
    }
}

}

But this method never called when I upgrade the version of database from 1 to 2. Also I can not change onUpgrade() Method in generated DaoMaster class, because it is Auto generated. When I upgrade SCHEMA_VERSION, onUpgrade() method is called but it is in DaoMaster class and I can not modify it.


Solution

  • The onUpgrade(Database, oldSchemaVersion, newSchemaVersion)-method is only called if the SCHEMA-VERSION stored in the SQLite-database differs from the SCHEMA-VERSION you specify in your code.

    Thus this method will run only once for each version of your database. If you forgot to include your update-logic in the first run, you will have to reset the schema-version manually for example using SQLiteManager.