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
网友评论