在Android上有数据库模式迁移的标准方式吗?例如,用户安装我的Android应用的较新版本,但是新版本需要更新数据库模式(并且擦除用户的数据库并且不能重新启动!)。所以我需要在第一次运行新版本时运行一些ALTER语句和/或复制表。如何在Android中进行数据库模式迁移?
回答
是SQLiteOpenHelper有不同版本的数据库模式的之间迁移的支持。
升级是通过实现
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
和回滚到以前的版本做的是还支持:
public abstract void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
随着思想的一点点,你几乎可以自动完成很多SQLiteOpenHelper的方法。看看这个博客张贴http://www.greenmoonsoftware.com/2012/02/sqlite-schema-migration-in-android/
更新:我遇到了一些问题,如果数据库的更新需要一段时间才能完成。看一下这个博客条目,了解适用于我的实现。 http://www.greenmoonsoftware.com/2012/05/android-developer-how-to-safely-update-the-application-database/
我知道这是一个旧的,但我已经开发了一个开源的eclipse插件,它是一个领域特定的语言(使用XText编写的DSL),允许您指定一个数据库作为迁移列表。
它产生的的ContentProvider,SqliteOpenHelper和合同为你,为类似于像联系人API或媒体API的API的API。
我写了一个基本的指南,帮助你弄到这里开始http://robotoworks.com/mechanoid-plugin/mechanoid-db/
它支持创建表,创建视图和ALTER TABLE语句,希望全面落实SQLite的语法适合这个DSL地方。
希望对垃圾邮件有帮助和抱歉! :)
yanchenko的答案是正确的,但是,你可能想看看Droid Migrate,这是我写的一个框架,它大量使用SQLiteOpenHelper
来促进自动SQLite迁移(很像Rails的做法)。
从轨道背景来看,这看起来很棒!我唯一担心的是,它是否仍然积极维护?最后一次提交大约在2年前.. – aandis 2016-07-09 10:44:37
所有关于SQLiteOpenHelper以上的答案是正确的,但它们都包含了一种反模式 - 创建/修改数据库结构的字符串。这使得开发和维护成本更高。有时候,迁移由许多陈述组成,其中一些可能相当大。把它们写成字符串,没有任何语法的意义......好吧,对于小型结构来说它可能工作,但对于一些更大的结构它可能是一场噩梦。
一个更好的办法来管理模式的变化将是保持每个迁移脚本在外部文件,并进行SQLiteOpenHelper的onUpgrade方法自动执行它们,以正确的顺序。这里有一篇关于这个主题的文章:http://www.vertabelo.com/blog/sqlite-on-android-handling-database-structure-changes。我希望这有帮助。
从版本3.0开始Flyway现在支持Android上的数据库迁移。它可以与SQLite一起使用,但也可以与任何其他希望使用的数据库(本地内存中的一个或服务器上的一个数据库用于双层应用程序)一起使用。
迁移可以写成两个SQL和Java。
我发现Flyway在Android上找到迁移有点棘手。迁移必须位于资产文件夹中,该文件夹并不是默认使用新的Android Studio项目创建的。此外,Android不会支持Jar文件中的迁移(或其他资产)。 我的解决方法是,如果Jar-project在同一个Android Studio项目中,在gradle.build中放置类似这样的东西:sourceSets {main {assets.srcDirs = ['../library/src/main/resources/' ]}} – 2016-02-14 12:24:05
@JohannesBrodwall如果你有一个更好的解决方案,可以开箱即用,我们当然会欢迎提出改进的请求。 – 2016-02-14 13:00:08
我认为唯一可以改进的地方是文档。它工作正常,但我花了一段时间才弄清楚。我无法在http://flywaydb.org/documentation/ – 2016-02-14 13:06:30
您可以使用库Android-Migrator增强默认SQLiteOpenHelper
,允许您在android assets
文件夹中应用从sql
文件迁移。
- 1. 使用Qt4进行数据库迁移(模式更改)
- 2. 我们如何在Grails中迁移/更新数据库模式?
- 3. 多数据库模式迁移(php/mysql)
- 4. 如何使Critera进行数据迁移
- 5. 如何在sails.js中迁移数据库?
- 6. 如何在EF Core代码首次迁移中进行数据迁移?
- 7. 在不同数据库模式下迁移数据
- 8. 如何对数据库迁移进行单元测试?
- 9. 如何使用SQLite进行数据库迁移?
- 10. 如何使用python脚本进行数据库迁移?
- 11. 如何从MySQL数据库迁移到WordPress格式数据库
- 12. 迁移。如何描述当前的数据库模式?
- 13. 使用新数据库进行项目迁移的设计模式
- 14. 在Realm迁移过程中,如何进行多对一迁移?
- 15. 数据库迁移
- 16. 数据库迁移
- 17. 数据库迁移
- 18. 数据库迁移
- 19. 在轨数据库迁移
- 20. 进行rake数据库迁移的备份。和命令拒绝耙数据库:迁移耙中止
- 21. 如何在从实体框架模型中的模型生成数据库时进行迁移第一个
- 22. 不使用rails中的迁移更新数据库模式
- 23. 如何以不同模式进行迁移?
- 24. 大规模WordPress的数据库迁移
- 25. 如何在Heroku上进行大量数据迁移?
- 26. 如何做数据库迁移Rails3 + datamapper
- 27. 如何测试数据库迁移?
- 28. 如何使用git迁移数据库?
- 29. 如何迁移我的heroku数据库?
- 30. Yii:如何在测试数据库上执行数据库迁移?
请详细解释在模式迁移下您了解什么?迁移在哪里? – Pentium10 2010-03-21 21:47:05