使用我的OpenHelper在greendao中升级数据库

时间:2014-08-18 10:16:58

标签: android database sqlite greendao

我使用GreenDao作为我的ORM。 我想将架构从oldversion迁移到新版本。 我使用this link来实现我的mygration。 所以我编写了自己的OpenHelper类并将其放到另一个包中。我实现了像这样的onUpgrade方法:

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;
    }
}

}

但是当我将数据库版本从1升级到2时,此方法从未调用过。 此外,我无法在生成的DaoMaster类中更改onUpgrade()方法,因为它是自动生成的。 当我升级SCHEMA_VERSION时,会调用onUpgrade()方法,但它在DaoMaster类中,我无法修改它。

2 个答案:

答案 0 :(得分:3)

只有在SQLite数据库中存储的onUpgrade(Database, oldSchemaVersion, newSchemaVersion)与您在代码中指定的SCHEMA-VERSION不同时,才会调用SCHEMA-VERSION - 方法。

因此,对于每个版本的数据库,此方法只运行一次。如果您在第一次运行时忘记包含更新逻辑,则必须手动重置架构版本,例如使用SQLiteManager

答案 1 :(得分:2)

将SCHEMA_VERSION更改为高于DAOMaster中先前值的值 然后你的onUpgrade方法将被调用