1

我的应用程序当前发布versionCode的是15,并且我想运行一些迁移代码来修复应用程序数据库上的用户数据(而不是模式结构)。

那么,对于从小于或等于 15的任何版本升级到任何高于或等于 16的版本的人,如何只运行一次修复代码?

4

2 回答 2

1

如果您正在谈论迁移 sql 数据库,那么SQLiteOpenHelper.onUpgrade()是放置迁移代码的正确位置。在这种情况下,您不必依赖 versionCode,而是依赖数据库版本号。因此,只需在您的下一次应用更新中增加数据库版本号并SQLiteOpenHelper自动调用onUpgrade(). 您可以这样做查询和表定义。您可以查询整个数据,将其加载到内存中,在内存中操作此数据,更改 sql 表定义,清除表并将(操作/迁移的)数据重新插入到您的 sql 表中。

如果您正在谈论迁移其他数据(如共享首选项、外部存储上的文件等),那么您可以子类化Applicationoverride onCreate()。然后您检查是否versionCode == 16并执行您的迁移工作,然后您必须存储迁移已成功完成的信息(以便在下次应用程序启动时不再重新运行迁移)。我会通过将布尔标志保存到共享首选项中来实现这一点。

于 2015-04-02T19:22:15.360 回答
0

For Sugar ORM, you could use the migration script to perform the upgrade. More details here.. http://satyan.github.io/sugar/migration.html

于 2015-04-04T19:36:47.823 回答