yuweiguocn/GreenDaoUpgradeHelper

在使用加密数据库,升级时遇到的问题

YinAndrew opened this issue · 0 comments

DatabaseOpenHelper 有两个升级方法

/**
 * Delegates to {@link #onUpgrade(Database, int, int)}, which uses greenDAO's database abstraction.
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    onUpgrade(wrap(db), oldVersion, newVersion);
}

/**
 * Override this if you do not want to depend on {@link SQLiteDatabase}.
 */
public void onUpgrade(Database db, int oldVersion, int newVersion) {
    // Do nothing by default
}

加密数据库的升级回掉方法是第二个,而普通的数据库是先调用第一个,然后内部再调用第二个;

加密的Helper 直接选择回掉的是第二种方法,
@OverRide
public void onUpgrade(net.sqlcipher.database.SQLiteDatabase db, int oldVersion, int newVersion) {
DatabaseOpenHelper.this.onUpgrade(wrap(db), oldVersion, newVersion);
}

我也查看了您的源码,发现您在收到SQLiteDatabase类型后也会转化成Database,
所以我觉得可以直接重写第二个回掉,
把migrate(SQLiteDatabase db, Class>... daoClasses)改成
migrate(Database db, Class>... daoClasses)