CoreData相关02 基础及运用:删除、修改、模糊查询

萧允晨
2023-12-01

删除条目

在上一篇文章中,可以发现有0岁的条目:

2022-03-04 16:27:23.552477+0800 CoreData实践1[72820:3059276] personName:personSomeone5009 age:0

系统想要将这些age = 0 的条目删掉。
其基本的操作是:

找到 age = 0 的条目
删除这些条目
用上下文保存
- (void)deleteSomeoneAge:(int64_t)age{
    //创建请求对象(填入的是表名称)
    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
    //创建过滤器
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"age=0"];
    request.predicate = predicate;
    //创建一个error用于接收错误,如果有错误的话。
    NSError* error = nil;
    //创建一个数组用于接收查询到的数据对象
    NSArray* resultArray = [self.context executeFetchRequest:request error:&error];
    
    if (error) {
        NSLog(@"查询失败,错误信息:%@",error);
    }else{
        NSLog(@"查询结果如下");
        for (Person* person in resultArray) {
            NSLog(@"personName:%@ age:%zd",person.name,person.age);
            //删除
            [self.context deleteObject:person];
        }
        //遍历删除完后,保存一下上下文
        //所有的操作都是在内存中的,最后我们需要提交到数据库更新一下
        [self.context save:&error];
        if(error){
            NSLog(@"数据删除保存失败,失败信息:%@",error);
        }else{
            NSLog(@"数据删除保存完成");
        }
    }
}

运行结果:

2022-03-04 16:47:03.009790+0800 CoreData实践1[73184:3074793] 查询结果如下
2022-03-04 16:47:03.010098+0800 CoreData实践1[73184:3074793] personName:personSomeone5009 age:0
2022-03-04 16:47:03.014724+0800 CoreData实践1[73184:3074793] 数据删除保存完成

修改数据

- (void)updatePersonWithName:(NSString*)name changeAge:(int64_t)age{
    //创建请求对象(填入的是表名称)
    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
    //创建过滤器
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name=%@",name];
    request.predicate = predicate;
    //创建一个error用于接收错误,如果有错误的话。
    NSError* error = nil;
    //创建一个数组用于接收查询到的数据对象
    NSArray* resultArray = [self.context executeFetchRequest:request error:&error];
    if (error) {
        NSLog(@"查询失败,错误信息:%@",error);
    }else{
        NSLog(@"查询结果如下");
        for (Person* person in resultArray) {
            NSLog(@"personName:%@ age:%lld",person.name,person.age);
            //所有的操作都是在内存中的,最后我们需要提交到数据库更新一下
            person.age = 18;
            [self.context save:&error];
            if(error){
                NSLog(@"数据修改失败,失败信息:%@",error);
            }else{
                NSLog(@"数据修改完成:%@-%lld",person.name,person.age);
            }
        }
    }
}

运行结果:

2022-03-04 17:45:32.081605+0800 CoreData实践1[74137:3113654] 查询结果如下
2022-03-04 17:45:32.082136+0800 CoreData实践1[74137:3113654] personName:personSomeone8011 age:92
2022-03-04 17:45:32.087725+0800 CoreData实践1[74137:3113654] 数据修改完成:personSomeone8011-18
2022-03-04 17:45:32.088342+0800 CoreData实践1[74137:3113654] 查询结果如下
2022-03-04 17:45:32.088495+0800 CoreData实践1[74137:3113654] personName:personSomeone8011 age:18

模糊查询

模糊查询有很多中方式,其中:

BEGINSWITH 		是开头相似
ENDWITH			是结尾相似
CONTAINSWITH	是中间相似
like *			通配符方式,*后面接匹配的字符
[self fuzzyQueryDataWithNameString:@"personSomeone80"];
- (void)fuzzyQueryDataWithNameString:(NSString*)info{
    //创建请求对象(填入的是表名称)
    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
    //创建过滤器
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",info];
    request.predicate = predicate;
    //创建一个error用于接收错误,如果有错误的话。
    NSError* error = nil;
    //创建一个数组用于接收查询到的数据对象
    NSArray* resultArray = [self.context executeFetchRequest:request error:&error];
    if (error) {
        NSLog(@"查询失败,错误信息:%@",error);
    }else{
        NSLog(@"查询结果如下");
        if (resultArray.count) {
            for (Person* person in resultArray) {
                NSLog(@"personName:%@ age:%lld",person.name,person.age);
            }
        }else{
            NSLog(@"无");
        }
    }
}

运行结果:

2022-03-04 18:01:04.186396+0800 CoreData实践1[74453:3127878] 查询结果如下
2022-03-04 18:01:04.186900+0800 CoreData实践1[74453:3127878] personName:personSomeone8011 age:18
2022-03-04 18:01:04.187305+0800 CoreData实践1[74453:3127878] personName:personSomeone8030 age:24
 类似资料: