我的应用程序当前发布的versionCode
为15,并且我想运行一些迁移代码来修复用户在应用程序数据库上的数据(而不是架构结构)。
因此,对于从任何版本小于或等于15升级到任何版本大于或等于16的人员来说,如何只运行一次固定代码?
如果您正在谈论迁移一个sql数据库,那么SQLiteOpenHelper.onUpgrade()是放置迁移代码的正确位置。在这种情况下,您不必依赖versionCode,而是依赖数据库版本号。因此,只需在下一次应用程序更新中增加数据库版本号,SQLiteOpenHelper
就会自动调用onUpgrade()
。您可以执行查询和表定义。您可以查询整个数据,将其加载到内存中,在内存中处理此数据,更改sql表定义,清除表,然后将(操作/迁移的)数据重新插入到sql表中。
如果您正在谈论迁移其他数据(如共享首选项,外部存储上的文件等),则可以将Application
覆盖为覆盖onCreate()
。然后,检查是否versionCode == 16
并进行迁移,然后您必须存储已成功完成迁移的信息(以免在下次启动应用程序时再次运行迁移)。通过将布尔值标志保存到共享首选项中,我可以做到这一点。
对于Sugar ORM,您可以使用迁移脚本来执行升级。此处有更多详细信息。http://satyan.github.io/sugar/migration.html