CoreData框架 数据持久化

Core Data

Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的。

传统的数据库要把数据写到数据库,而且要写SQL语句 Core Data 就避免了写SQL语句的麻烦了

CoreData的使用步骤

1.创建模型文件 相当于数据库 2.添加实体 相当表 3.创建实体类 相于模型类 4.生成上下文 关联模型文件生成数据库 5.保存对象到数据库 6.从数据库获取对象 7.更新数据 8.删除数据

1.创建模型文件 所谓的创建模型就是间接生成数据库表

2.添加实体

3.创建实体类 以创建员工实体类为例

生成上下文件 关联模型文件生成数据库 NSManagedObjectContext _context = [[NSManagedObjectContext alloc] init];// 模型文件NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];// 持久化存储调度器NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];NSLog(@”%@”,doc);NSString *sqlitePath = [doc stringByAppendingPathComponent:@”company.sqlite”];//数据存储的类型 数据库存储路径[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];_context.persistentStoreCoordinator = store;保存对象到数据库Employee *employee = [NSEntityDescription insertNewObjectForEntityForName:@”Employee” inManagedObjectContext:_context];employee.name = @”zhangsan”;employee.age = @18;employee[_context save:nil];打开CoreData的SQL语句输出开关 1.打开Product,点击EditScheme…2.点击Arguments,在ArgumentsPassed On Launch中添加2项> 1CoreData实例生成实体类: NSManagedObject@property (nonatomic, retain) NSString * name;@property (nonatomic, retain) NSNumber * age;@property (nonatomic, retain) NSNumber * height;@end#import “Employee.h”@implementation Employee@dynamic name;@dynamic age;@dynamic height;@end

import头文件框架

(strong,nonatomic)NSManagedObjectContext *context;@endCoreData模糊查询- (IBAction)likeSearcher:(id)sender {// 查询NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@”Employee”];// 过滤// 1.查询以wang开头员工NSPredicate *pre = [NSPredicate predicateWithFormat:@”name BEGINSWITH %@”,@”wang”];// 2.以si 结尾NSPredicate *pre = [NSPredicate predicateWithFormat:@”name ENDSWITH %@”,@”si”];// 3.名字包含 gNSPredicate *pre = [NSPredicate predicateWithFormat:@”name CONTAINS %@”,@”g”];// 4.like 以si结尾NSPredicate *pre = [NSPredicate predicateWithFormat:@”name like %@”,@”li*”];request.predicate = pre;//读取信息NSError *error = nil;NSArray *emps = [self.context executeFetchRequest:request error:&error];if (!error) {NSLog(@”emps: %@”,emps);for (Employee *emp in emps) {NSLog(@”%@ %@ %@”,emp.name,emp.age,emp.height);}}else{NSLog(@”%@”,error);}}CoreData 更新数据#pragma mark 更新员工信息- (IBAction)updateEmployee:(id)sender {*emps = [self findEmployeeWithName:@”wangwu”];// 2.更新身高if (emps.count == 1) {Employee *emp = emps[0];emp.height = @1.7;}// 3.同步(保存)到数据[self.context save:nil];}-(NSArray *)findEmployeeWithName:(NSString *)name{// 1.查找员工NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@”Employee”];NSPredicate *pre = [NSPredicate predicateWithFormat:@”name=%@”,name];request.predicate = pre;return [self.context executeFetchRequest:request error:nil];}CoreData 删除数据#pragma mark 删除员工- (IBAction)deleteEmployee:(id)sender {[self deleteEmployeeWithName:@”lisi”];}-(void)deleteEmployeeWithName:(NSString *)name{// 删除zhangsan// 1.查找到zhangsanNSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@”Employee”];NSPredicate *pre = [NSPredicate predicateWithFormat:@”name=%@”,name];request.predicate = pre;executeFetchRequest:request error:nil];for (Employee *emp in emps) {NSLog(@”删除员工的人 %@”,emp.name);[self.context deleteObject:emp];}// 3.用context同步下数据库//所有的操作暂时都是在内存里,调用save 同步数据库[self.context save:nil];}CoreData 查询数据#pragma mark 读取员工信息- (IBAction)readEmployee:(id)sender {//创建一个请求对象 (填入要查询的表名-实体类)NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@”Employee”];// 过滤查询// 查找张三 并且身高大于1.8NSPredicate *pre = [NSPredicate predicateWithFormat:@”name=%@ AND height > %@”,@”zhangsan”,@(1.8)];// request.predicate = pre;//排序 以身高进行升序NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@”height” ascending:NO];request.fetchLimit = 5;request.fetchOffset = 10;//读取信息NSError *error = nil;NSArray *emps = [self.context executeFetchRequest:request error:&error];if (!error) {NSLog(@”emps: %@”,emps);for (Employee *emp in emps) {NSLog(@”%@ %@ %@”,emp.name,emp.age,emp.height);}}else{NSLog(@”%@”,error);}}#pragma mark 添加员工信息- (IBAction)addEmployee:(id)sender {// 创建员工Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@”Employee” inManagedObjectContext:self.context];// 设置员工属性emp1.name = @”lisi”;emp1.age = @28;emp1.height = @2.10;//保存 – 通过上下文操作NSError *error = nil;[self.context save:&error];if (!error) {NSLog(@”success”);}else{NSLog(@”%@”,error);} }CoreData 创建上下文-(void)setupContext{// 1.上下文 关联Company.xcdatamodeld 模型文件NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];// 持久化存储调度器NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];// 存储数据库的名字NSError *error = nil;// 获取docment目录NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];// 数据库保存的路径NSString *sqlitePath = [doc stringByAppendingPathComponent:@”company.sqlite”];[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&error];context.persistentStoreCoordinator = store;self.context = context;}-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{// 创建员工for (int i = 0; i < 10; i++) {Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@”Employee” inManagedObjectContext:self.context];// 设置员工属性emp1.name = [NSString stringWithFormat:@”wangwu %d”,i];emp1.age = @(28 + i);emp1.height = @2.10;//保存 – 通过上下文操作NSError *error = nil;[self.context save:&error];if (!error) {NSLog(@”success”);}else{NSLog(@”%@”,error);}} }@end调用- (void)viewDidLoad {[super viewDidLoad];[self setupContext];}

其实只要你愿意,一切都可以变得很容易。

CoreData框架 数据持久化

相关文章:

你感兴趣的文章:

标签云: