coredata
一、coredata简介
用来保存数据,是基于Sqlite的封装将数据保存到一个数据库文件。它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句.
二、创建coredata的流程
第一步:创建coredata的数据模型文件
创建完成之后会生成一个.xcdatamodeld文件
注:一个数据库对应一个上下文
打开文件添加表单文件
注:一个表单对应的是一个模型文件
若要做多表关联参照下列方法
第二步:创建实体对象文件
创建管理对象文件
选择数据模型文件
选择表单文件
创建完成后会生成以下文件,到此表单文件跟Employee就建立了对应关系。存储在数据库Employee表单的就是Employee对象。
第三步:代码关联
#pragma mark--创建上下文
-(void)setUpContext{
//1.创建管理对象-- nil代表关联所有的模型文件。
#if 1
NSManagedObjectModel * model = [NSManagedObjectModelmergedModelFromBundles:nil];
#else
NSURL * modelUrl = [[NSBundlemainBundle]URLForResource:namewithExtension:@"momd"];
NSManagedObjectModel * model = [[NSManagedObjectModelalloc]initWithContentsOfURL: modelUrl];
#endif
//2.创建数据库文件--构造数据库存储路径
#if 1
NSString * doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];
NSString * sqlitePath = [docstringByAppendingPathComponent:@"company.sqlite"];
#else
NSString * sqlitePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/company.sqlite"];
#endif
NSURL * url = [NSURLfileURLWithPath:sqlitePath];
NSError *error =nil;
//3.创建协调器--模型管理和数据库
NSPersistentStoreCoordinator * coordinator = [[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];
//存储数据库的名字
[coordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:&error];
//4.创建上下文
NSManagedObjectContext * context = [[NSManagedObjectContextalloc]init];
self.context = context;
self.context.persistentStoreCoordinator = coordinator;
}
#pragma mark—增
- (IBAction)addEmployee:(id)sender {
//创建一个员工
Employee * emp1 = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Employee"inManagedObjectContext:self.context];
emp1.name =@"wangwu";
emp1.age =@(16);
emp1.height =@(1.6);
//通过上下文更新数据库
NSError * error =nil;
[self.contextsave:&error];
}
#pragma mark—查
- (IBAction)readEmployee:(id)sender {
//创建一个取得请求对象
NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];
#if 0
//1.条件查找
request.predicate = [NSPredicate predicateWithFormat:@"name=%@ AND age=%@",@"zhangsan",@(17)];
request.predicate = [NSPredicate predicateWithFormat:@"name=%@ OR age>%@",@"zhangsan",@(17)];
request.predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH%@",@"zhang"];
request.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS%@",@"ang"];
request.predicate = [NSPredicate predicateWithFormat:@"name like%@",@"*ang*"];
#elseif
//2.排序
NSSortDescriptor * sort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];
request.sortDescriptors =@[sort];
#elseif
//3.分页查询--每页显示5条数据
request.fetchOffset =0;
request.fetchLimit =5;
#endif
//读取信息
NSError * error =nil;
NSArray * emps = [self.contextexecuteFetchRequest:requesterror:&error];
for (Employee * empin emps) {
NSLog(@"age = %@,name = %@,height = %@",emp.age,emp.name,emp.height);
}
}
#pragma mark--删
-(void)deleteData{
//查找要删除的内容
NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];
//查找条件
request.predicate = [NSPredicatepredicateWithFormat:@"name=%@",@"zhangsan"];
//读取出内容
NSArray * emps = [self.contextexecuteFetchRequest:requesterror:nil];
//删除内容
for (Employee * empin emps) {
[self.contextdeleteObject:emp];
}
//同步数据库
[self.contextsave:nil];
}
#pragma mark--改
-(void)upDateData{
NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];
request.predicate = [NSPredicatepredicateWithFormat:@"name=%@",@"zhangsan"];
NSError * error =nil;
NSArray * emps = [self.contextexecuteFetchRequest:requesterror:&error];
for (Employee * empin emps) {
emp.height =@(200);
}
[self.contextsave:nil];
}