coreData

請尊重原創的勞動成果:羅朝輝(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 的符合條件的數據對象。框架

1. CoreData:單表

須要導入CoreData框架fetch

1> 建立模型文件 [至關於一個數據庫裏的表]NSManagedObjectModelspa

2> 添加實體 [一張表]Add Entitycode

3> 建立實體類 [至關模型]

4> 生成上下文 關聯模型文件生成數據庫 NSManagedObjectContext

關聯的時候,若是本地沒有數據庫文件,CoreData本身會建立

2. 建立:

持久化,把數據保存到一個文件,而不是內存

// 上下文關連數據庫
    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;

3. 增長數據:

插入數據:用描述NSEntityDescription

Employee *emp = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_context];
[_context save:&error];

4. 查詢數據:

只要涉及到查詢數據的都要用: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 數據結果比較複雜的時候,表與表以前的關聯比較的時候

5. CoreData多表:

多表的重點就是在單表的基礎上增長了關聯

例如:Student表和Teacher表  Student對Teacher:多對一   To One(反之:To Many)

設置關聯以後能夠關係名獲取對方的信息

6. CoreData查詢:

1> 分頁查詢:

fetchOffset:分頁查詢的起始索引

fetchLimit:每次查詢數據的條數

fetchBatchSize:一次加載到內存的條數

2> 模糊查詢:

模糊查詢就是經過設置過濾條件來實現:

過濾條件:NSPredicate:

CONTAINS   LIKE  BEGINSWITH ENDSWITH

7. CoreData多個數據庫:

7.1 一個數據庫對應一個上下文

_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];

7.2 如何開啓CoreData的SQL語句輸出開關:

點擊Product--EditScheme   -- Arguments -- ArgumentsPassed On Launch 添加:

1>    -com.apple.CoreData.SQLDebug

2>     1

8. 網絡:

OSI(Open System Interconnection)開放系統應用互聯 參考模型:

從上至下:

應用層(APDU) -- 表示層(PPDU) -- 會話層(SPDU) -- 傳輸層(TPDU) -- 網絡層(報文)-- 數據鏈路層(幀) -- 物理層(比特)

相關文章
相關標籤/搜索