coreData实现增删除改查

来源:互联网 发布:导弹坐标系转换软件 编辑:程序博客网 时间:2024/06/05 12:39

首先要建立好模型,然后根据模型生成相应的类

然后打开数据库,并保存好上下文:

- (void)openDB{    /*     ** Core Data的操作方式     1. 将所有定义好的数据模型文件合并成为一个数据模型(NSManagedObjectModel)        建立起针对实体对应的数据表的SQL语句,以便创建数据表     2. 用数据模型来创建持久化存储调度,此时就具备了创建表的能力     3. 为存储调度添加持久化的数据存储(SQLite数据库),如果没有,新建并创建数据表        如果已经存在,直接打开数据库。        在打开数据库之后,会判断实体当前的结构与数据表的描述结构是否一致,如果不一致,会提示打开失败!     */    // 创建数据库    // 1. 实例化数据模型(将所有定义的模型都加载进来)    // merge——合并    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];    // 2. 实例化持久化存储调度,要建立起桥梁,需要模型    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];    // 3. 添加一个持久化的数据库到存储调度    // 3.1 建立数据库保存在沙盒的URL    NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *path = [docs[0] stringByAppendingPathComponent:@"my.db"];    NSURL *url = [NSURL fileURLWithPath:path];    // 3.2 打开或者新建数据库文件,如果文件不存在,则新建之后打开, 否者直接打开数据库    NSError *error = nil;    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];    if (error) {        NSLog(@"打开数据库出错 - %@", error.localizedDescription);    } else {        NSLog(@"打开数据库成功!");        _context = [[NSManagedObjectContext alloc] init];        _context.persistentStoreCoordinator = store;    }}

增加单个实体:

- (void)addPerson{    // 1. 实例化并让context“准备”将一条个人记录增加到数据库    Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context];    //2,设置好对象的属性    //...    // 3. 保存(让context保存当前的修改)    if ([_context save:nil]) {        NSLog(@"新增成功");    } else {        NSLog(@"新增失败");    }}

 增加一对多的多个实体:

- (void)addPerson{    // 1. 设置一方的实体信息    Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context];    p.name = @"张老头";    p.age = @10;    p.phoneNo = @"100";    p.image = UIImagePNGRepresentation([UIImage imageNamed:@"头像1"]);        //2,准备多方的实体信息    Book *b = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:_context];    b.name = @"太极真经";    b.price = @20000.99;    b.author = @"太极忽悠";    Book *b2 = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:_context];    b2.name = @"一阳神功";    b2.price = @0.99;    b2.author = @"老忽悠";        //3,通过Set绑定一对多的关系    NSSet *bookSet = [NSSet setWithObjects:b, b2, nil];    p.books = bookSet;    // 保存(让context保存当前的修改)    if ([_context save:nil]) {        NSLog(@"新增成功");    } else {        NSLog(@"新增失败");    }}



查询操作:

- (void)allPersons{    // 1. 实例化一个查询(Fetch)请求    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];    // 3. 条件查询,通过谓词来实现的//    request.predicate = [NSPredicate predicateWithFormat:@"age < 60 && name LIKE '*五'"];    // 在谓词中CONTAINS类似于数据库的 LIKE '%王%'//    request.predicate = [NSPredicate predicateWithFormat:@"phoneNo CONTAINS '1'"];    // 如果要通过key path查询字段,需要使用%K//    request.predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '1'", @"phoneNo"];    // 直接查询字表中的条件        // 2. 让_context执行查询数据    NSArray *array = [_context executeFetchRequest:request error:nil];//   处理结果//    for (Person *p in array) {//    }}

修改记录:

- (void)updatePerson{    // 1. 实例化查询请求    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Book"];    // 2. 设置谓词条件    request.predicate = [NSPredicate predicateWithFormat:@"author CONTAINS '大忽悠'"];    // 3. 由上下文查询数据    NSArray *result = [_context executeFetchRequest:request error:nil];    // 4. 更新字段    for (Book *book in result) {        NSLog(@"%@ %@ %@", book.name, book.author, book.price);        book.name = @"西游记";    }    // 通知上下文保存保存    [_context save:nil];}

删除操作

- (void)removePerson{    // 1. 实例化查询请求    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];    // 2. 设置谓词条件    request.predicate = [NSPredicate predicateWithFormat:@"name = '张老头'"];    // 3. 由上下文查询数据    NSArray *result = [_context executeFetchRequest:request error:nil];        // 4. 处理结果    for (Person *person in result) {        // 执行删除操作        [_context deleteObject:person];        break;    }    // 5. 通知_context保存数据    if ([_context save:nil]) {        NSLog(@"删除成功");    } else {        NSLog(@"删除失败");    }}

可见,增加,修改,删除都是通过保存上下文来达到目的的


0 0