• coreData


    请尊重原创的劳动成果:罗朝辉(http://www.cppblog.com/kesalin)

    http://www.cppblog.com/ipzyh/articles/CoreData.html

    Entity - NSEntityDescription

    Entity 相当于数据库中的一个表,它描述一种抽象数据类型,其对应的类为 NSManagedObject 或其子类。

    NSEntityDescription 常用方法:
    +insertNewObjectForEntityForName:inManagedObjectContext: 工厂方法,根据给定的 Entity 描述,生成相应的 NSManagedObject 对象,并插入 ManagedObjectContext 中。
    -managedObjectClassName 返回映射到 Entity 的 NSManagedObject 类名
    -attributesByName 以名字为 key, 返回 Entity 中对应的 Attributes
    -relationshipsByName 以名字为 key, 返回 Entity 中对应的 Relationships

    Property - NSPropertyDescription

    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框架

    1> 创建模型文件 [相当于一个数据库里的表]NSManagedObjectModel

    2> 添加实体 [一张表]Add Entity

    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) -- 网络层(报文)-- 数据链路层(帧) -- 物理层(比特)

  • 相关阅读:
    天大复试机试练习_003
    C++随手记--字符串转数字
    C++标准库STL 之 我觉得应该有的方法——split
    apt-get 详解&&配置阿里源
    Nginx 图文详解
    MySQL数据库管理常用命令小结
    oracle数据库备份
    SqlServer数据库备份还原步骤
    mysql数据备份与恢复
    Tomcat架构
  • 原文地址:https://www.cnblogs.com/Evelyn-zn/p/4989996.html
Copyright © 2020-2023  润新知