0

这是我的生成器类

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");

在生成器中创建AbcDB 到新版本的应用程序。一旦用户得到更新,他们就会得到 sql 异常,说没有找到列。因为我正在调用新的登录

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

但问题是我已经给了一次登录,用户总是会在从 Play 商店升级时进入登陆屏幕。所以我不知道用户是否为了删除和创建所有表而升级了应用程序。

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

4

1 回答 1

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);
}
于 2016-05-10T07:50:10.350 回答