我使用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类中,我无法修改它。
答案 0 :(得分:3)
只有在SQLite数据库中存储的onUpgrade(Database, oldSchemaVersion, newSchemaVersion)
与您在代码中指定的SCHEMA-VERSION
不同时,才会调用SCHEMA-VERSION
- 方法。
因此,对于每个版本的数据库,此方法只运行一次。如果您在第一次运行时忘记包含更新逻辑,则必须手动重置架构版本,例如使用SQLiteManager。
答案 1 :(得分:2)
将SCHEMA_VERSION更改为高于DAOMaster中先前值的值 然后你的onUpgrade方法将被调用