請尊重原創的勞動成果:羅朝輝(http://www.cppblog.com/kesalin)html
http://www.cppblog.com/ipzyh/articles/CoreData.html正則表達式
Entity - NSEntityDescriptionsql
Entity 至關於數據庫中的一個表,它描述一種抽象數據類型,其對應的類爲 NSManagedObject 或其子類。數據庫
NSEntityDescription 經常使用方法:
+insertNewObjectForEntityForName:inManagedObjectContext: 工廠方法,根據給定的 Entity 描述,生成相應的 NSManagedObject 對象,並插入 ManagedObjectContext 中。
-managedObjectClassName 返回映射到 Entity 的 NSManagedObject 類名
-attributesByName 以名字爲 key, 返回 Entity 中對應的 Attributes
-relationshipsByName 以名字爲 key, 返回 Entity 中對應的 Relationships網絡
Property - NSPropertyDescriptionapp
2)Property - NSPropertyDescription
Property 爲 Entity 的特性,它至關於數據庫表中的一列,或者 XML 文件中的 value-key 對中的 key。它能夠描述實體數據(Attribute),Entity之間的關係(RelationShip),或查詢屬性(Fetched Property)。
> Attribute - NSAttributeDescription
Attribute 存儲基本數據,如 NSString, NSNumber or NSDate 等。它能夠有默認值,也可使用正則表達式或其餘條件對其值進行限定。一個屬性能夠是 optional 的。
> Relationship - NSRelationshipDescription
Relationship 描述 Entity,Property 之間的關係,能夠是一對一,也能夠是一對多的關係。
> Fetched Property - NSFetchedPropertyDescription
Fetched Property 根據查詢謂詞返回指定 Entity 的符合條件的數據對象。框架
須要導入CoreData框架fetch
1> 建立模型文件 [至關於一個數據庫裏的表]NSManagedObjectModelspa
2> 添加實體 [一張表]Add Entitycode
3> 建立實體類 [至關模型]
4> 生成上下文 關聯模型文件生成數據庫 NSManagedObjectContext
關聯的時候,若是本地沒有數據庫文件,CoreData本身會建立
持久化,把數據保存到一個文件,而不是內存
// 上下文關連數據庫 NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; // model模型文件 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; // 持久化存儲調度器 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; // 告訴Coredata數據庫的名字和路徑 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *sqlitePath = [doc stringByAppendingPathComponent:@"company.sqlite"]; NSLog(@"%@",sqlitePath); [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil]; context.persistentStoreCoordinator = store; // 切記要保存 !!! _context = context;
插入數據:用描述NSEntityDescription
Employee *emp = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_context];
[_context save:&error];
只要涉及到查詢數據的都要用:NSFetchRequest(修改數據 刪除數據 查詢數據都須要用)謂詞:NSPredicate
// 1.FectchRequest 抓取請求對象 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; // 2.設置過濾條件 NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@", @"zhangsan"]; //request.predicate = pre; // 3.設置排序 NSSortDescriptor *heigtSort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:NO]; request.sortDescriptors = @[heigtSort]; // 4.執行請求 NSError *error = nil; NSArray *emps = [_context executeFetchRequest:request error:&error]; if (error) { NSLog(@"error"); }
在對數據庫中的數據進行刪除和修改操做以後須要保存數據:
[_context save:nil];
知識點:
數據存儲的結構比較簡單的時候,使用CoreData
開發效率會高點,爲何?面向對象,並且不用寫sql語句
FMDatabases 數據結果比較複雜的時候,表與表以前的關聯比較的時候
多表的重點就是在單表的基礎上增長了關聯
例如:Student表和Teacher表 Student對Teacher:多對一 To One(反之:To Many)
設置關聯以後能夠關係名獲取對方的信息
1> 分頁查詢:
fetchOffset:分頁查詢的起始索引
fetchLimit:每次查詢數據的條數
fetchBatchSize:一次加載到內存的條數
2> 模糊查詢:
模糊查詢就是經過設置過濾條件來實現:
過濾條件:NSPredicate:
CONTAINS LIKE BEGINSWITH ENDSWITH
_companyContext = [self setupContextWithModelName:@"Company"]; _weiboContext = [self setupContextWithModelName:@"Weibo"];
使用下面的方法,若是 bundles爲nil 會把bundles裏面的全部模型文件的表放在一個數據庫(把全部的表放在一個數據庫中)
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
要想一個數據庫中存儲一個模型文件 須要以下代碼:
// URLForResource:每一個模型文件的名字 NSURL *companyURL = [[NSBundle mainBundle] URLForResource:@"Company" withExtension:@"momd"]; // 建立NSManagedObjectModel須要NSURL NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:companyURL];
點擊Product--EditScheme -- Arguments -- ArgumentsPassed On Launch 添加:
1> -com.apple.CoreData.SQLDebug
2> 1
OSI(Open System Interconnection)開放系統應用互聯 參考模型:
從上至下:
應用層(APDU) -- 表示層(PPDU) -- 會話層(SPDU) -- 傳輸層(TPDU) -- 網絡層(報文)-- 數據鏈路層(幀) -- 物理層(比特)