2011-06-15 47 views
6

我有一個使用一個SQLite數據庫來存儲其數據模型的iOS應用。用戶不能以任何方式更改此數據庫的內容。數據庫內容的唯一改變方式是在未來的應用程序更新中添加更多內容。 (應用程序永遠不會將內容寫入數據庫,只能從數據庫讀取內容)如何覆蓋一個SQLite數據庫中的iOS應用程序時,一個新的版本發佈

因此,當我執行此類更新時,我希望它在我正在創建的新版本中使用「較新」版本的數據庫,並且以擺脫舊的數據庫。什麼是最好的方式去做這件事?是否有一種簡單的方法可以告訴它在更新時抓取新版本的數據庫,還是需要在自定義邏輯中進行編程?

回答

4

讓我們從第一次安裝應用程序開始討論。 sqlite的DB將在流動的步驟是init:

  1. 檢查是否在應用程序存在安裝文件夾中的[APPNAME] .db的。

  2. 創建安裝文件夾中的空[APPNAME] .db文件,如果這個文件不存在。

  3. 創建一個記錄來表示當前的應用程序版本,並將其存儲在一個名爲「appversion」表(這也可以存儲在首選項文件)。

  4. 負荷的位置,可以將其存儲在步驟3中的舊版本號, 比較它的當前版本號,並且需要執行命名,如「[應用程序名稱] _sql_v1.sql,[APPNAME藪SQL文件] _sql_v2.sql,[appname] _sql_v3.sql',請記住,每個版本都將擁有一個'[appname] _sql_v * .sql'文件,其中包含所有表架構更改並記錄更改。如果您的應用程序已升級到版本7,您會在您的應用程序包中找到7個sql文件。

  5. 我們假設某人已經安裝了版本爲2的應用程序,但直到有一天他/她發現當前版本是7,然後他/她將其升級到7,才更新。兩個代碼版本號將是在升級完成後第一次啓動應用時加載:2和7,所以這些sql文件:[appname] _sql_v3.sql,[appname] _sql_v4.sql,[appname] _sql_v5.sql,[appname] _sql_v6.sql,[appname] _sql_v7.sql將逐個執行。

記住這些東西:

1.do沒有把SQL語句初始化代碼,把它放在一個SQL文件,並把它讀作需要的SQLite數據庫 。

2.每個版將擁有一個「[應用程序名稱] _sql_v * .SQL」包含到透水版本所做的更改文件。

0

如果您使用DB從你的包(我假設你作爲你的DB是隻讀的),那麼你就自動使用DB的一個新版本的應用程序更新。如果您將數據庫從數據包複製到文檔文件夾,那麼只需用新數據庫重寫舊數據庫即可。

0

將預加載的數據庫添加到您的項目(到Resources文件夾)。這將與您的應用程序一起部署,並且可以在運行時在主包路徑中找到。

由於用戶將永遠不會寫的內容,但從中只讀的,你應該能夠從那裏直接打開它。你可以使用它的路徑:

NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"ReadOnlyDatabase" ofType:@"sqlite"]; 
相關問題