我的应用程序当前发布versionCode
的是15,并且我想运行一些迁移代码来修复应用程序数据库上的用户数据(而不是模式结构)。
那么,对于从小于或等于 15的任何版本升级到任何高于或等于 16的版本的人,如何只运行一次修复代码?
我的应用程序当前发布versionCode
的是15,并且我想运行一些迁移代码来修复应用程序数据库上的用户数据(而不是模式结构)。
那么,对于从小于或等于 15的任何版本升级到任何高于或等于 16的版本的人,如何只运行一次修复代码?
如果您正在谈论迁移 sql 数据库,那么SQLiteOpenHelper.onUpgrade()是放置迁移代码的正确位置。在这种情况下,您不必依赖 versionCode,而是依赖数据库版本号。因此,只需在您的下一次应用更新中增加数据库版本号并SQLiteOpenHelper
自动调用onUpgrade()
. 您可以这样做查询和表定义。您可以查询整个数据,将其加载到内存中,在内存中操作此数据,更改 sql 表定义,清除表并将(操作/迁移的)数据重新插入到您的 sql 表中。
如果您正在谈论迁移其他数据(如共享首选项、外部存储上的文件等),那么您可以子类化Application
override onCreate()
。然后您检查是否versionCode == 16
并执行您的迁移工作,然后您必须存储迁移已成功完成的信息(以便在下次应用程序启动时不再重新运行迁移)。我会通过将布尔标志保存到共享首选项中来实现这一点。
For Sugar ORM, you could use the migration script to perform the upgrade. More details here.. http://satyan.github.io/sugar/migration.html