美文网首页
3.7 CoreData数据库

3.7 CoreData数据库

作者: 草根小强 | 来源:发表于2019-04-22 10:47 被阅读0次

CoreData数据库

//CoreData 是一个系统原生的数据库,用来存储模型的
//所谓原生,其实是苹果原生的,本源还是对Sqlite进行了简单的封装

//CoreData 原生的使用比较麻烦

//1.准备数据库(实例化)

//xcdatamodeld  这是一个   数据库
//再CoreData 里面,没有表的概念, 数据存储在一个叫做 实体 我们可以理解为 表   (实体  entity)  (atrrbute  理解为 属性列表)
//再给实体添加属性的时候,每添加一个属性,需要指定一个类型

//建表 顺序不像FMDB 那样  CoreData 可以没有主键  也不需要主键 因为他是用模型存储的,每一个模型的地址都是指定的  找到指定的指定的模型地址,这样就可以进行增加数据了
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "Person.h"
@interface ViewController ()
//数据管理上下文
@property (nonatomic,strong)NSManagedObjectContext *context;
@end

@implementation ViewController

- (void)viewDidLoad {
    [self prepareForCoreData];
    
    //2.增删改查
    
}
/**数据库的准备操作*/
- (void)prepareForCoreData{
    
    //在coreData 里面 我们用一个叫做 NSManagedObjectContext 类的对象来进行数据库的操作
    
    //实例化
#warning 引入系统库#import <CoreData/CoreData.h>
    
    //1.
    /**
     NSPrivateQueueConcurrencyType      = 0x01,
     NSMainQueueConcurrencyType          = 0x02
     */
    //实例化
    self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
#warning 设置数据持久存储的协调器 铺垫步骤
    //找地址
    ///xcdatamodeld 文件, 编译后,会生成.mond 这样的文件
    //所以我们找.momd 类型即可
    NSString *path = [[NSBundle mainBundle] pathForResource:@"CoreDataDemo1" ofType:@"momd"];
    
    //实例化数据存储模型NSManagedObjectModel
    //在这里需要传入/xcdatamodeld文件的地址
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]];
    
    //实例化数据持久存储协调器 NSPersistentStoreCoordinator
    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
    
#warning 设置存储类型
    //设置数据库的保存路径
    NSString *strorePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"person.db" ];
    
    
    //设置存储类型
    //URL:是数据库保存的路径 所以我们来写一个路径
    
    [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:strorePath] options:nil error:nil];
    
    
#warning 设置数据持久存储的协调器
    //设置数据持久存储的协调器
    [self.context setPersistentStoreCoordinator:coordinator];
    
    
    
    
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    
    //增
        [self addRecord];
    
    //删
//    [self deleteRecord];
    //改
    //    [self changeRecord];
    //打印查询的结果
    for (Person *person in [self findAll]) {
        NSLog( @"%@\n",person.age);
    }
    
    
    
}
//增
- (void)addRecord{
    
    // CoreData 来存储数据,我们是通过模型来实现的
    
    Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context];
    person.name = @"赵四";
    person.age = @(arc4random() %31);
    person.sex= @1;
//    NSLog(@"%@",person);
    
    __autoreleasing NSError *error = nil;
    [self.context save:&error];
    if (error) {
        //保存失败
        NSLog(@"失败了");
    }
    else {
        
        NSLog(@"保存成功");
    }
}

//查
- (NSArray *)findAll{
    
    //查询的请求
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"];
    
#warning 查询的谓语,查询的条件
    [request setPredicate:[NSPredicate predicateWithFormat:@"age > %d && age < 20",10]];//@"age > %d",10 和@"age > 10” 是一样的
    
#warning 查询结果排序
    //升序
    [ request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]]];
    
    
    //查询所有数据
    //执行这个请求,结果是数组,数组里面的元素是Person模型
    
    return  [self.context executeFetchRequest:request error:nil];
    
    
    
    //直接再这里输入fetch就可以
//    
//- (NSArray *)findAll{
//        
        
        //查询请求  请求某个表
//        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
//        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.context];
//        
//        
//        [fetchRequest setEntity:entity];
//
//        //这里是查询条件
//        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > %d", 10];
//        
//        [fetchRequest setPredicate:predicate];
//
//        //升序
//        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age"
//                                                                       ascending:YES];
//        [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];
//      
//       //查询所有数据
//       //执行这个请求,结果是数组,数组里面的元素是Person模型
//    
//        NSError *error = nil;
//        NSArray *fetchedObjects = [self.context executeFetchRequest:fetchRequest error:&error];
//        if (fetchedObjects == nil) {
//            NSLog(@"%@",error);
//        }
//        return fetchedObjects;
}



//删除
- (void)deleteRecord{
    //删除也是通过模型来做的   这里是拿到数据存储到数组中的第一个元素模型    firstObject 这个是拿到的是
    Person *person = [[self findAll] firstObject];
    
    //删除
    [self.context deleteObject:person];
    //保存修改
    
    [self.context save:nil];
}

- (void)changeRecord{
    
    //改也是通过模型来做的
    Person *person = [[self findAll] firstObject];
    //修改
    person.age = @13;
    [self.context save:nil];

}
@end
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>


@interface Person : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * age;
@property (nonatomic, retain) NSNumber * sex;

@end


#import "Person.h"


@implementation Person

@dynamic name;
@dynamic age;
@dynamic sex;

@end
CoreData数据库1.png
CoreData数据库2.png

相关文章

网友评论

      本文标题:3.7 CoreData数据库

      本文链接:https://www.haomeiwen.com/subject/rvzcgqtx.html