2010-04-22 90 views
3

目前,我有一個iPhone應用程序,從啓動時的外部XML文件中讀取數據,然後將此數據寫入到數據庫(它僅讀/寫用戶的應用還沒有看到數據之前,雖然)如何以編程方式填充數據庫

我擔心的是將有一個數據的數年後的目錄,並且第一次用戶運行該應用程序時,它將不得不閱讀此內容並且速度非常慢。

我們建議的解決方案是將這些數據「預構建」包含到應用程序數據庫中,以便它不必在首次裝載時載入歸檔數據 - 這些數據在購買時已經在應用程序中。

我的問題是,是否有一種方法可以自動填充,比如說,從XML文件或數據的東西這個數據。數據庫在SQLite中。我會手工填充它,但顯然這將需要很長時間,所以我只是想知道是否有人有更多...編程解決方案...

+3

只需使用您在應用程序中用於創建數據庫的任何內容即可將初始xml數據呈現到應用程序中。然後將剛剛創建的數據文件作爲資源添加到項目中。當應用程序啓動時,檢查數據文件是否在數據目錄中,如果沒有,請將primer-db文件從資源包複製到數據目錄並繼續。 – 2010-04-22 02:16:18

+0

我提高了你的評論傑森,但你真的應該把它作爲答案! – 2010-04-22 02:17:11

+0

嗨賈森 - 我想我明白你告訴我要做什麼: 1.編寫「虛擬」應用程序將數據加載到數據庫中 2.將「虛擬」應用程序加載到適當的應用程序中作爲資源 3.如果數據庫不存在在數據目錄中,從資源包(「虛擬」應用程序,內部正確的應用程序?)複製到數據目錄 4.我們現在應該很好去... 唯一的是,我真的不知道如何從一個應用程序到另一個應用程序?比如,模擬器的數據目錄在哪裏?我很困惑如何真正*做*你提到的東西都是*恥辱* – 2010-04-22 02:25:58

回答

1

我要充實賈森的回答,我已經打上我的文章作爲一個社區維基所以我不應該得到任何點這個。

他不是在談論一個虛擬應用程序 - 編寫應用程序像往常一樣,但請檢查數據庫中的主束存在,你調用填充的plist代碼之前。您可以在模擬器中運行該模塊,將生成的sqllite數據庫提取出來並添加到您的項目中 - 如果您只需要讀取它,就可以從主包目錄中讀取它。如果您需要進一步寫入,請將其複製到可寫文檔區域,然後從那裏使用它。所以基本上對於主用戶來說,填充數據庫的代碼永遠不會被調用...

唯一的缺點是你最終還是會包括你正在閱讀的plist文件,即使你只需要數據庫。你可以創建一個不同的構建目標,它是主要目標的副本,唯一的區別是它保存了plist文件,而你爲應用程序商店構建的主要目標沒有。

1

不要採取傑森的回答雷,我不能評論,所以它必須在這裏。

好的是,您可以在Mac上直接訪問模擬器的文件系統。我現在遠離我的位置,或者我可以告訴你究竟在哪裏尋找,但我只是通過將db文件的名稱放入探照燈中並用它來運行來找到它。

你也不需要任何賴特代碼來填充數據庫,因爲你可以使用命令行工具進行初始設置,如果這是更方便。

由於資源存儲在應用程序包的只讀簽名部分,因此您需要將其複製。

0

我有同樣的問題,你使用sqlite,大規模插入它真的很慢。所以最好的方式是直接提供一個已填充的sqlite數據庫。

你有另一種方式,而不是INSERT INTO,來填充sqlite數據庫。您可以生成CSV文件爲每個表,並使用您的計算機和sqlite的外殼裝入表:

僅有2簡單的命令:

.separator SEPARATOR 
.import FILE TABLE 

例子:

adslol:~ user$ sqlite3 
SQLite version 3.6.12 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> .separator ; 
sqlite> .import myData.csv nameOfMyTable 
sqlite> .quit 

我希望它你一直在尋找:)

如果你需要一個好的客戶端sqlite3的嘗試SQLite Manager,這是一個Firefox插件。

相關問題