iOS CoreData增删改查

下面是coredata对sqllite增删改查,多表查询,模糊查询等操作的代码,如下。

#import "ViewController.h"
#import "SiteList+CoreDataProperties.h"
#import "Nation+CoreDataProperties.h"
@interface ViewController ()
@property (strong,nonatomic)NSManagedObjectContext *context;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //初始化数据库
    [self setupContext];
    
}

//创建数据库方法,会自动生成model模型文件下的数据库表
-(void)setupContext{
    
    //创建上下文,关联MyModel.xcdatamodeld模型文件
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    //创建模型对象,传nil会把bundle下所有的文件关联起来
    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
    //持久化存储调度器
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
    NSError *err = nil;
    //存储数据库的名字拼接
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *sqlitePath = [doc stringByAppendingPathComponent:@"user.sqlite"];
    NSLog(@"%@",sqlitePath);
    //开始创建数据库文件
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&err];
    context.persistentStoreCoordinator = store;
    self.context = context;
}

//添加信息
- (IBAction)addSiteList:(UIButton *)sender {
    //创建员工
    SiteList *site = [NSEntityDescription insertNewObjectForEntityForName:@"SiteList" inManagedObjectContext:self.context];
    //设置员工属性
    site.id = @"3";
    site.name = @"北京";
    site.parentSite = @"china";
    site.userCount = 19;
    //通过上下文保存
    NSError *erro;
    [self.context save:&erro];
    if (!erro) {
        NSLog(@"保存成功!");
    }else{
        NSLog(@"保存失败!");
    }
}

//读取信息
- (IBAction)readSiteList:(UIButton *)sender {
    //创建一个请求对象
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"];
    //过滤查询湖北数据,并且用户数大于19的数据
//    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@ and userCount > %d",@"湖北",19];
//    request.predicate = pre;
    
    //以站点人数排序,YES代表顺序排序
//    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userCount" ascending:YES];
//    request.sortDescriptors = @[sort];
    
    //分页查询,每页5条数据
    request.fetchLimit = 5;
    //第1页从第0条数据查询
    request.fetchOffset = 0;
    
    //读取信息
    NSError *erro;
    NSArray *arr = [self.context executeFetchRequest:request error:&erro];
    if (!erro) {
        //NSLog(@"arr:%@",arr);
        for (SiteList *site in arr) {
            NSLog(@"%@=%@=%d",site.id,site.name,site.userCount);
        }
    }else{
        NSLog(@"%@",erro);
    }
}

//删除信息
- (IBAction)delSiteList:(UIButton *)sender {
    //查找河北数据
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"];
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",@"河北"];
    request.predicate = pre;
    //删除查找数据(只是内存删除,需同步数据库)
    NSArray *arr = [self.context executeFetchRequest:request error:nil];
    for (SiteList *site in arr) {
        NSLog(@"删除的数据名称:%@",site.name);
        [self.context deleteObject:site];
    }
    //用context同步数据库
    [self.context save:nil];
}

//更改信息
- (IBAction)updateSiteList:(UIButton *)sender {
    //查找信息
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"];
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",@"辽宁"];
    request.predicate = pre;
    //更新身高
    NSArray *arr = [self.context executeFetchRequest:request error:nil];
    for (SiteList *site in arr) {
        NSLog(@"修改信息成功:%@",site.name);
        site.name = @"辽宁2";
    }
    //同步数据库
    [self.context save:nil];
}

//模糊查询
- (IBAction)likeSiteList:(UIButton *)sender {
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"];
    //以某某开头
    //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"湖"];
    //以某某结尾
    //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"北"];
    //包含某个字符
    //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"宁"];
    //like版模糊查询
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@ ",@"湖*"];
    
    request.predicate = pre;
    //读取信息
    NSError *erro;
    NSArray *arr = [self.context executeFetchRequest:request error:&erro];
    if (!erro) {
        for (SiteList *site in arr) {
            NSLog(@"%@=%@=%d",site.id,site.name,site.userCount);
        }
    }else{
        NSLog(@"%@",erro);
    }
}

//多表添加地区和国家数据
- (IBAction)addSiteListAndNation:(UIButton *)sender {
    
    //创建地区
    SiteList *site = [NSEntityDescription insertNewObjectForEntityForName:@"SiteList" inManagedObjectContext:self.context];
    site.id = @"15";
    site.name = @"华盛顿";
    site.parentSite = @"america";
    site.userCount = 36;
    
    //创建国家
    Nation *nation = [NSEntityDescription insertNewObjectForEntityForName:@"Nation" inManagedObjectContext:self.context];
    nation.code = @"america";
    nation.name = @"美国";
    
    //关联地区和国家
    site.part = nation;
    
    //创建地区2
    SiteList *site2 = [NSEntityDescription insertNewObjectForEntityForName:@"SiteList" inManagedObjectContext:self.context];
    site2.id = @"16";
    site2.name = @"澳门";
    site2.parentSite = @"china";
    site2.userCount = 88;
    
    //创建国家2
    Nation *nation2 = [NSEntityDescription insertNewObjectForEntityForName:@"Nation" inManagedObjectContext:self.context];
    nation2.code = @"china";
    nation2.name = @"中国";
    
    //关联地区和国家
    site2.part = nation2;
    NSLog(@"多数据表添加成功!");
    //保存数据
    [self.context save:nil];
}

//多表查询国家下面的所有地区
- (IBAction)findSiteListOfNation:(UIButton *)sender {
    
    //查询美国下的所有地区
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"];
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"part.name=%@",@"美国"];
    request.predicate = pre;
    NSArray *arr =  [self.context executeFetchRequest:request error:nil];
    for (SiteList *site in arr) {
        NSLog(@"%@=%@=%d",site.id,site.name,site.userCount);
    }
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值