android - 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 中删除任何与迁移相关的代码 - 我可能会后悔,会不会介绍有什么新问题吗?
解决方案
推荐阅读
- python - 在 crontab 中设置路径的正确方法是什么?
- mysql - 在 MySql 中使用自连接数据透视表
- logstash - 用于 IBM 集成总线 10 (IIB) 的 ELK
- c++ - C++ Curl post动态变量
- pandas - 无法读取 Google 调查使用 Pandas 生成的 csv 文件
- sql-injection - 如何解决 Athena 的 SQL 注入?
- vim - Vim 折叠表达式不起作用
- ibm-cloud-private - 来自 Pod 内部的 ibm-cloud-private DNS 或 Internet 问题
- c# - 从 BlendShape 字典创建 ARFaceGeometry
- spring-boot - 如何在zuul中做基于内容的动态路由?