在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