【发布时间】:2015-06-07 20:37:33
【问题描述】:
我的应用当前发布的versionCode 是15,我想运行一些迁移代码来修复应用数据库中的用户数据(不是架构结构)。
那么,对于从任何版本小于或等于15升级到任何版本高于或等于16的人,如何只运行一次修复代码?
【问题讨论】:
标签: android database-migration sugarorm android-database
我的应用当前发布的versionCode 是15,我想运行一些迁移代码来修复应用数据库中的用户数据(不是架构结构)。
那么,对于从任何版本小于或等于15升级到任何版本高于或等于16的人,如何只运行一次修复代码?
【问题讨论】:
标签: android database-migration sugarorm android-database
如果您正在谈论迁移 sql 数据库,那么 SQLiteOpenHelper.onUpgrade() 是放置迁移代码的正确位置。在这种情况下,您不必依赖 versionCode,而是依赖数据库版本号。因此,只需在下一次应用程序更新中增加数据库版本号,SQLiteOpenHelper 将自动调用onUpgrade()。您可以这样做查询和表定义。您可以查询整个数据,将其加载到内存中,在内存中操作此数据,更改 sql 表定义,清除表并将(操作/迁移的)数据重新插入到您的 sql 表中。
如果您正在谈论迁移其他数据(如共享首选项、外部存储上的文件等),那么您可以将Application 子类化为覆盖onCreate()。然后你检查versionCode == 16 并做你的迁移工作,然后你必须存储迁移成功的信息(在下一次应用启动时不再重新运行迁移)。我会通过将布尔标志保存到共享首选项中来实现这一点。
【讨论】:
对于 Sugar ORM,您可以使用迁移脚本来执行升级。更多细节在这里..http://satyan.github.io/sugar/migration.html
【讨论】: