Play商店更新上的绿色dao更新列已经发生

时间:2016-05-09 10:56:16

标签: android sqlite greendao greendao-generator

这是我的Generator类

public class Generator {
    public static void main(String[] args) throws Exception {
        Schema schema = new Schema(1, "app.abc.db.dao");
        createAbcDB(schema);

    }
    private static void createAbcDB(Schema schema) throws IOException, Exception {
        Entity abc = schema.addEntity("Abc");
        abc.addIdProperty();
        abc.addShortProperty("name");
    }
}

这是我从dao会话获得abc dao的代码。这很好。

DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(SurveyActivity.this, "abc.db", null);
        SQLiteDatabase db = devOpenHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        DaoSession daoSession = daoMaster.newSession(IdentityScopeType.None);
        abcDao = daoSession.getAbcDao();

我又添了一列

abc.addShortProperty("email");

在生成器中createAbcDB到新版本的app。一旦用户得到更新,他们就会收到sql异常,说没有找到任何列。因为我正在呼吁新登录

dropAllTables(db, true);
onCreate(db); 

但问题是我已经一次登录,用户将始终从Play商店升级登陆屏幕。因此,我不知道用户是否已升级应用程序,以便删除并创建所有表格。

所以我的问题是如何知道我的桌子已经改变了?

1 个答案:

答案 0 :(得分:0)

每次进行这样的重大修改时,都必须更新de Schema版本号:

Schema schema = new Schema(2, "app.abc.db.dao");

这样,在DaoMaster中的OpenHelper或您正在使用的SQLiteOpenHelper中,您可以在onUpgrade()函数中控制此更改:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
    dropAllTables(db, true);
    onCreate(db);
}