2011-06-17 43 views
2

我有一個使用sqlite3的數據庫中保存數據之前,我發佈應用程序,我需要確保一些表中的數據(即用戶已保存)必須被複制iPhone應用程序到新的數據庫。如何在iPhone應用程序更新源碼

我應該如何管理這個遷移。我正在考慮分離數據庫和查詢。那不好嗎?因此,當應用程序打開時,我檢查數據庫是否在文檔文件夾中,如果不復制數據庫並在單獨的文件中運行查詢。然後,當它是一個新版本時,我檢查版本號並只運行文件中的查詢(更新數據並修改其中的一部分),而不復制數據庫?這樣做的

回答

1

一種方法是有一個表在數據庫中包含數據庫的架構版本。

一旦用戶在文件夾(這可能是從預製的數據庫複製從應用程序包)的數據庫,你應該更改該數據庫與當前模式保持同步。這包括升級架構和任何更改的數據。

您可以通過捆綁一些在你的應用程序的SQL腳本,將同時帶來的用戶數據庫架構前進了一步,例如這樣做:

    從用戶數據庫
  1. 讀取架構版本=> 3(電流爲5)
  2. 執行SQL腳本 「schema_3_to_4.sql」
  3. 執行SQL腳本 「schema_4_to_5.sql」
  4. 全部完成 - 準備用

如果你沒有在當前的數據庫模式版本,只是認爲這是0版本,並在您的版本1更新添加表中,如:

begin exclusive transaction; 

create table schema (version integer); 
insert into schema(version) values (1); 

create table temp_update as select * from question; 
drop table question; 
create table question(id INTEGER PRIMARY KEY, new_answer INTEGER); 
insert into question(id, new_answer) select id, 42 from temp_update; 
drop table temp_update; 

commit; 
+0

謝謝!所以你基本上說的是,用戶第一次下載應用程序時,數據庫將被從軟件包複製到文檔文件夾。當用戶更新應用程序時,我通過加載從文件中更改數據庫的sql-queries更新數據庫? – LuckyLuke 2011-06-17 10:06:48

+0

@Andreas是的,現貨:-) – 2011-06-17 10:44:47

+0

謝謝你,但你對這種方法有什麼看法?不使用核心數據時不會那麼愚蠢?我沒有時間去了解如何在Core Data中對其進行建模,並且實際上也可以自己創建它,這也是一件有趣的事,那就是原因。 – LuckyLuke 2011-06-17 11:12:39

0

我認爲最好的辦法是從遷移手動將sqlite3數據庫處理爲基於Core-Data的數據庫。 Core Data爲您提供了很多工具用於定義和建模數據,包括一個超級簡單(如果可用)lightweight migration進程,令人難以置信的緩解各種數據庫版本之間的數據遷移過程。

使用lightweight migration(或更復雜的custom manual migration),您的問題將自動解決。