2013-02-17 122 views
0

我有以下情形: 我的應用程序與數據庫版本4一起發佈給客戶。ActiveAndroid:升級數據庫版本

我做了一些錯誤修正,並添加了一些更多的功能。這個過程也改變了我的模型,這就是爲什麼數據庫也改變了。

如何檢查客戶在其設備上安裝了哪些數據庫版本並將舊數據遷移到新數據庫?在ActiveAndroid庫中是否有onUpgrade方法或類似的東西?

回答

2

在深入研究ActiveAndroid的源代碼後,我找到了一個解決方案。 ActiveAndroid可以使用位於資產文件夾中的sql腳本從一個版本遷移到另一個版本。

它排序/位於資產/遷移所有的SQL文件使用自然排序算法:

經發現將被執行每個SQL腳本,如果> oldVersion和< = NEWVERSION

+0

百萬感謝你!自從很多天以來,我一直在努力解決這個問題。我已將數據庫版本從1升級到3.我的文件(3.sql)是正確的,但(2.sql)有問題。我的印象是,它只挑選與新版本相對應的文件。 – hannanessay 2014-05-02 05:11:00

+0

「自然排序」是什麼意思?它是'「3」<「10」'還是'「10」<「3」'? – BornToCode 2017-02-22 05:40:12

0

如果您通過SQLiteOpenHelper訪問您的數據庫並執行適當的數據庫版本控制,則可以使用它的onUpgrade方法運行一些代碼來更新數據庫。不然的話,你應該做你的定製解決方案。

0

我建議你創建一個擴展爲SQLiteOpenHelper的類。當你的數據庫通過這個類打開時,它將在必要時自動調用onUpgrade()方法。此方法的參數包括數據庫模式的新版本號和舊版本號。

0

每當你的模式您需要通過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;