我有以下情形: 我的应用程序与数据库版本4一起发布给客户。ActiveAndroid:升级数据库版本
我做了一些错误修正,并添加了一些更多的功能。这个过程也改变了我的模型,这就是为什么数据库也改变了。
如何检查客户在其设备上安装了哪些数据库版本并将旧数据迁移到新数据库?在ActiveAndroid库中是否有onUpgrade方法或类似的东西?
我有以下情形: 我的应用程序与数据库版本4一起发布给客户。ActiveAndroid:升级数据库版本
我做了一些错误修正,并添加了一些更多的功能。这个过程也改变了我的模型,这就是为什么数据库也改变了。
如何检查客户在其设备上安装了哪些数据库版本并将旧数据迁移到新数据库?在ActiveAndroid库中是否有onUpgrade方法或类似的东西?
在深入研究ActiveAndroid的源代码后,我找到了一个解决方案。 ActiveAndroid可以使用位于资产文件夹中的sql脚本从一个版本迁移到另一个版本。
它排序/位于资产/迁移所有的SQL文件使用自然排序算法:
经发现将被执行每个SQL脚本,如果> oldVersion和< = NEWVERSION
如果您通过SQLiteOpenHelper访问您的数据库并执行适当的数据库版本控制,则可以使用它的onUpgrade方法运行一些代码来更新数据库。不然的话,你应该做你的定制解决方案。
我建议你创建一个扩展为SQLiteOpenHelper
的类。当你的数据库通过这个类打开时,它将在必要时自动调用onUpgrade()
方法。此方法的参数包括数据库模式的新版本号和旧版本号。
每当你的模式您需要通过Configuration或AA_DB_VERSION
元数据来增加数据库版本号。如果添加新类,ActiveAndroid会自动将它们添加到数据库中。但是,如果您想要更改现有表中的某些内容(例如添加或删除列),则可以使用名为<NewVersion>.sql
的sql脚本完成此操作,其中NewVersion为AA_DB_VERSION
,assets/migrations
。
如果ActiveAndroid的文件名大于旧的数据库版本并小于或等于新版本,它将执行脚本。
让我们假设你已经为Items表添加了一列颜色。您现在需要将AA_DB_VERSION
增加到2并提供一个脚本2.sql
。
ALTER TABLE Items ADD COLUMN color INTEGER;
百万感谢你!自从很多天以来,我一直在努力解决这个问题。我已将数据库版本从1升级到3.我的文件(3.sql)是正确的,但(2.sql)有问题。我的印象是,它只挑选与新版本相对应的文件。 – hannanessay 2014-05-02 05:11:00
“自然排序”是什么意思?它是'“3”<“10”'还是'“10”<“3”'? – BornToCode 2017-02-22 05:40:12