2011-08-24 53 views
1


我是Core Data的新手,我遇到了問題。
我有一個文件「db.sqlite」,它有3個表,每個包含大約10k條記錄。
現在我的問題是我可以將這個文件添加到我的項目,並使用CoreData API訪問(選擇/更新)數據。

謝謝您提前。
通過Core Data API訪問.sqlite文件

回答

4

您無法使用Core Data讀取任意SQL文件。你也無法將任意的SQL文件轉換爲Core Data可以使用的SQL文件。核心數據的sqlite模式沒有記錄,並且不斷變化。核心數據只會讀取和寫入其架構,每個sqlite存儲文件都必須配置爲特定的數據模型文件。直接爲Core Data創建SQL存儲始終是一個脆弱的解決方案。

理解Core Data不是SQL很重要。實體不是表格。對象不是行。屬性不是列。關係不是連接。核心數據是一個對象圖管理系統,它可能會或可能不會持久化對象圖,並且可能會或可能不會在後臺使用SQL來做到這一點。試圖用SQL語言來思考覈心數據會導致你完全誤解核心數據,並導致很多悲傷和浪費時間。

由於Mundi pointed out,您需要使用標準SQL C API讀取現有的SQL文件,然後將該數據加載到託管對象中,並讓Core Data將對象保存到其SQL存儲中。這可能聽起來像很多額外的工作,但事實上,您正在從僅限於將數據從磁盤上獲取數據的有限SQL API轉換爲爲應用程序提供完整數據模型的Core Data API。

2

Core Data API實際上隱藏了所謂持久存儲的機制。它更像是一種對象建模API,可以非常高效地保存數據。它也可以使用與sqlite不同的數據庫。

因此,如果你想使用核心數據,我會建議首先導入所有的記錄和創建一個新的數據庫文件與核心數據。您可以使用SQLite API讀取現有數據庫和Core Data API,將新的面向對象數據寫入新數據庫。

一旦您的所有原始數據都在覈心數據中,您應該堅持這一點。

+0

+1 @Mundi - 非常感謝您的回答。如果我只想讀取數據,即(選擇)我可以使用CoreData嗎? – SNR

+1

我不這麼認爲。你將不得不使用SQLite API。您處理每行的字典,將其轉換爲核心數據實體並保存。 – Mundi

+1

核心數據將只使用核心數據模式讀取SQL文件,並使用提供給持久存儲協調器的'.xcdatamodel'生成。你不能使用它讀取任意的sql文件。這不是Core Data的用處。 – TechZen