我有以下场景:我的应用程序使用数据库版本 4 发布给客户。
我做了一些错误修正并添加了更多功能。这个过程也改变了我的模型,这就是数据库也改变的原因。
如何检查客户在其设备上安装的数据库版本并将旧数据迁移到新数据库?ActiveAndroid 库中是否有 onUpgrade 方法或类似的方法?
我有以下场景:我的应用程序使用数据库版本 4 发布给客户。
我做了一些错误修正并添加了更多功能。这个过程也改变了我的模型,这就是数据库也改变的原因。
如何检查客户在其设备上安装的数据库版本并将旧数据迁移到新数据库?ActiveAndroid 库中是否有 onUpgrade 方法或类似的方法?
在深入研究了 ActiveAndroid 的源代码后,我找到了一个解决方案。ActiveAndroid 可以使用位于资产文件夹中的 sql 脚本从一个版本迁移到另一个版本。
它使用自然排序算法对位于 assets/migrations/ 中的所有 sql 文件进行排序:
如果找到的每个 SQL 脚本 > oldVersion 和 <= newVersion
如果您通过 SQLiteOpenHelper 访问您的数据库并进行适当的数据库版本控制,那么您可以使用它的 onUpgrade 方法运行一些代码来更新您的数据库。否则你应该做你的自定义解决方案。
我建议你创建一个扩展类SQLiteOpenHelper
。当你的数据库通过这个类打开时,它会onUpgrade()
在需要的时候自动调用该方法。此方法的参数包括数据库模式的新旧版本号。
AA_DB_VERSION
每当您的架构更改时,您都需要通过配置或元数据来增加数据库版本号。如果添加了新类,ActiveAndroid 会自动将它们添加到数据库中。但是,如果您想更改现有表中的某些内容(例如添加或删除列),则可以使用名为 的 sql-scripts 来完成<NewVersion>.sql
,其中 NewVersion 是AA_DB_VERSION
, in assets/migrations
。
如果文件名大于旧数据库版本且小于或等于新版本,ActiveAndroid 将执行脚本。
假设您向 Items 表添加了列颜色。您现在需要增加到AA_DB_VERSION
2 并提供一个脚本2.sql
。
ALTER TABLE Items ADD COLUMN color INTEGER;