1. SQLite資料庫
- sqlite資料庫操作的基本流程是, 建立資料庫, 再通過定義一些字段來定義表格結構, 可以利用sql語句向表格中插入記錄, 删除記錄, 修改記錄, 表格之間也可以建立聯系。
- 這些操作都需要使用SQL語句去實作,感覺操作很直接。如果先前有一點資料庫和SQL基礎的話,寫起來會感覺很親切,都是一些資料庫操作的語句。但是當操作變多之後,語句越來越多,就很煩,代碼比較多,看起來也會混亂一些。
- 如果想要詳細了解,可以看iOS學習36資料處理之SQLite資料庫
2. CoreData資料庫
- CoreData.framework :iOS中提供了對原始SQLite資料庫API通路的封裝,通過這個framework來管理資料緩存和持久資料要比使用SQL語句操作SQLite資料庫簡單和友善許多。
- 機制:通過framework來存儲和查詢資料隻需要使用framework提供的類就可以,你可以完全使用對象的形式來管理你的資料以及資料之間的關系,framework已經很好地将資料庫表和字段封裝成了對象和屬性,表之間的一對多、多對多關系則封裝成了對象之間的包含關系.
- 通過 relationship 來表示:
一對多時:設定為 properties 項選中 Optional, Plural 選項 To-Many Relationship 選中;
多對一反向關系時:properties 項選中 Optional, Count 項選中Minimun 和 Maximun 并分别設定其值為1;
如果想要詳細了解,可以看iOS學習37資料處理之CoreData
3. 比較
1> CoreData的類與SQLite資料庫中的文字描述做一個對應:
NSEntityDescription --> 表格結構
NSManagedObjectModel --> 資料庫中所有表格和他們的聯系
NSPersistentStoreCoordinator --> 資料庫存放方式
NSManagedObjectContext --> 資料庫操作
NSFetchRequest --> 查詢語句
NSManagedObject --> 表格的記錄
2> 下面我們可以詳細的看看CoreData的類
- NSEntityDescription、NSManagedObjectModel
NSEntityDescription 用來定義表格結構, 是以你就可以了解 NSManagedObjectModel 中的 setEntities:(NSArray *)entities 函數大概有什麼用了 . 通常, 定義 model , 是用檔案 CoreData.xcda*****odel , 可以圖形化的操作. 這類似用nib來建立界面.
- NSPersistentStoreCoordinator
這個類的對象通常用 NSManagedObjectModel 的對象來初始化, 這個類抽象出不同的存放方式, 最經常用的是 NSSQLiteStoreType.
- NSManagedObjectContext
這個類的對象又用 NSPersistentStoreCoordinator 的對象來初始化, 它裡面有些方法來添加, 删除 NSManagedObject
- NSFetchRequest
通常用 NSEntityDescription 來構造查詢, 也就指定查詢那個表格, 另外可以指定排序.
- NSFetchedResultsController
NSFetchedResultsController 隻是又封了一下, 和 NSFetchRequest 合起來使用, 友善取資料, 另外和 NSManagedObjectContext 關聯, 當資料庫發生變化的時候收到通知.
3> 特點比較
- CoreData的強大之處就在于這種關系可以在一個對象更新時,其關聯的對象也會随着更新,相當于你更新一張表的時候,其關聯的其他表也會随着更新。
- Core Data的另外一個特點就是提供了更簡單的性能管理機制,例如,使用NSFetchedResultsController類,你不用使用SQL的Limit而是使用NSFetchRequest類的setFetchBatchSize()就可以限制查詢記錄的總數,而NSFetchedResultsController類神奇的地方在于需要擷取更多記錄的時候,這個類會自動更新其緩存。
- 對于多表查詢上相對來說,CoreData 沒有 SQL 直覺,但 CoreData 的功能還是可以完成相關操作的,但是對于類似外連接配接,左連接配接等操作,在CoreData中就顯得無力。