首页 > 解决方案 > SQLiteOpenHelper onUpgrade 用错误的 oldVersion 调用?

问题描述

我在我的 Android 应用程序中使用 GreenDao,并且有一个SQLiteOpenHelper我称之为的子类DBHelper

public class DBHelper extends DaoMaster.OpenHelper {
    // DaoMaster.OpenHelper extends SQLiteOpenHelper and passes in `SCHEMA_VERSION` which for me is 32

    public static final String DATABASE_NAME = "my_app.db";     

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null);
    }

    @Override
    public void onCreate(SQLiteDatabase arg0) {
        ...
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        ...
    }
}

我偶尔会在代码路径上看到来自该方法的异常,这些异常只有在小于 11onUpgrade时才会发生- 我当前的模式版本是 32,而版本 11 现在已经有六年多了。oldVersion

这导致了一些非常严重的问题,因为作为从小于 11 版本的迁移路径的一部分,我迁移到了一些新的数据库表,这意味着回滚涉及删除数据库表,因此我收到了一些数据丢失的报告。

我真的不相信这oldVersion是正确的 - 我从用户那里收到的错误报告都说他们最近第一次安装了该应用程序。有人知道为什么会发生这种情况吗?

由于在过去六年中使用过该应用程序的任何人现在都应该完成迁移,我想我应该oldVersion从小于 11 的 s 中删除任何与迁移相关的代码 - 我可能会后悔,会不会介绍有什么新问题吗?

标签: androidandroid-sqlitegreendao

解决方案


推荐阅读