2010-08-30 83 views
10

我的iPhone應用程序的第一個版本(這是在應用程序商店)有一個SQLite數據庫。現在我想推出應用程序的第二個版本,該應用程序還包含一個SQLite數據庫。如何在應用程序版本更新時在iPhone上的SQLite數據庫中維護數據?

我明白,更新後,SQLite數據庫被刪除,然後添加新的。我不希望發生這種情況,因爲該數據庫包含用戶保存的一些信息。如果在更新時刪除它並不好。

問題是,我如何從舊的SQLite(舊版本)數據庫轉移數據到新的數據?我該如何測試App Store上會發生的版本更新過程?

任何幫助將不勝感激。謝謝。

回答

2

答案是:從您的應用程序實現版本一開始:-)

在這種情況下,可以考慮應用程序沒有版本信息是版本1,我會做的是店某處的數據庫版本(可能在數據庫本身內)。打開數據庫時,根據應用程序的期望版本檢查其版本,然後根據需要更改任何模式並更新存儲的版本號。

如果您還沒有將數據庫複製到應用程序的Documents目錄中,那麼這完全沒有實際意義,因爲它只能被讀取。否則,文檔目錄的內容將在更新之間保留。

要測試更新,只需從設備上的以前版本的全新副本開始。然後安裝新的(構建和運行將會很好)。你確實保留了舊版本的應用,對吧?

+0

錯誤...我絕對應該保留我的應用程序的舊版本。無論如何,我會從現在開始。但我明白你在說什麼,這似乎是一個不錯的主意。將應用程序的版本插入數據庫是一種技巧,但仍是一個好方法。所以這個想法是,當應用程序啓動時,您檢查以查看版本號。如果db的版本號低於應用程序本身的版本號,那麼你啓動一些SQL語句(如創建新表等))並更新數據庫中的版本,以便在下次啓動應用程序時不需要再次更新 – Andrei 2010-08-30 16:09:05

+0

對,雖然我發現最好爲應用程序和數據庫分別保留版本號。否則,如果更新應用程序但保持數據庫不變,應用程序可能會錯誤地將更新應用於數據庫。 – Brian 2010-08-30 17:17:52

2

這不是我親自測試過,但據我所知:

  1. 你的第一個問題的been answered,短的那就是你的運氣了,如果你的源碼db不會複製到Documents目錄,因爲整個應用程序包將在升級時被替換。假設christo16是正確的,並且假設您已發貨的應用程序未將複製到文檔中,那麼您可能需要發送一個臨時版本,即確實如此。然後,在推出數據庫更新之前,只需確保大量用戶已安裝臨時版本即可。
  2. Re:測試。您應該能夠通過iTunes安裝構建來測試升級行爲,而不是通過Build &運行。自從我嘗試了一段時間以來......已經過了一段時間......按照專門構建的說明應該可以做到這一點,儘管它可能會過度殺傷。
+0

謝謝...我想這是有道理的......但如果有新的數據庫發生了一些變化會怎麼樣。例如。在這個新版本中,我添加了一個新表格,但另一個表格保持不變。什麼將是一個很好的解決方法呢? – Andrei 2010-08-30 10:57:58

相關問題