2014-12-03 32 views
3

我有問題,當我釋放我的應用程序的新版本時,如果我添加一個新的列到我的數據庫表,數據庫不會更新。任何人都知道如何創建升級版本的腳本,以防有新列或新表格?用Sqlite.net升級數據庫用於Xamarin的Pcl android

謝謝

+0

不更新爲新列未添加?或值爲空?順便提一下,請記住,方法CreateTable <>()如果不存在或創建表,則更新現有表,因此您希望調用邏輯以在您每次啓動應用程序時創建表 – user3455363 2014-12-03 11:52:37

回答

-2

你必須記住,CreateTable它已經在爲你進行列更新了,因爲它在內部調用了一個名爲MigrateTable的方法,你可以在這裏看到進一步的說明:https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs#L562

但是,您可能必須對數據庫進行更高級的修改,例如添加觸發器或類似的東西。 在這種情況下,我建議你手動進行修改。

在Xamarin形式我已經結束了與此: https://gist.github.com/matpag/b2545cc22c8e22449cd7eaf6b4910396

不可能是最好的策略不斷,但似乎爲我工作。

總結
你要保存的數據庫版本與PRAGMA關鍵字訪問的SQLite數據庫稱爲user_version的內部標誌。 每次獲得數據庫連接時,都必須執行檢查,並查看當前數據庫版本是否與應用程序上次數據庫版本相同。 如果不是,您需要執行數據庫更新並設置新的當前版本。

2

這不是一個腳本的問題,因爲沒有這樣的事情。您可以發佈帶有「補丁」的版本,該補丁將運行一次,將所有記錄提取到臨時表格 - >刪除表格 - >重新創建它(將確保它是使用新列等創建的) - >重新插入再次記錄。過了一段時間,當你知道所有的用戶(或任何時候你設置了限制)已經轉移到新版本,你可以從代碼中消除「補丁」。

希望它有幫助。

1

自動遷移功能還未在sqlite.net-PCL工作,但它看起來像它的工作在其他源碼包:sqlite的淨PCL,這實際上是Xamarin推薦源碼包。