Core Data
1.CoreData用于做数据持久化,适合大数据量的存储和查询;
2.CoreData不是数据库,CoreData可以使用数据库,XML等方式来存储数据;
3.SQLite通过SQL语句操作数据,CoreData使用面向对象的方式操作数据;
4.使用CoreData操作数据,不需要写任何SQL语句;
5.使用CoreData,需要导入CoreData框架。
CoreData关系图
如下CoreData分为五个模块
1. NSManagedObjectContext 负责应用和数据库之间的交互(CRUD);
2. NSPersistentStoreCoordinator添加持久化存储库(SQLite数据库)是物理数据存储的物理文件和程序之间联系的桥梁,负责管理不同对象的上下文;
3.NSManagedObjectModel被管理的对象模型,对应定义的模型文件;
4.NSEntiityDescription实体描述。
NSManagedObjectModel用来加载数据模型文件
NSURL *url = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"]; NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
NSPersistentStoreCoordinator用来打开数据库
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:dataModel]; //定义数据库文件路径 NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/coreData.sqlite"]; NSURL *dbURL = [NSURL fileURLWithPath:filePath];
</pre><p class="p9"><span class="s9">//</span>打开数据库文件<span class="s10"> </span></p><p class="p11"></p><pre name="code" class="html">/** * 1.如果文件不存在,则新创建数据库文件 2.如果文件存在,则直接打开 */ NSError *error = nil; [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:dbURL options:nil error:&error]; //对数据进行操作 context = [[NSManagedObjectContext alloc] init];// NSManagedObjectContext *context;为全局变量 context.persistentStoreCoordinator = store;
NSManagedObjectContext常用方法
将数据对象保存到数据文件
-save:将⼀一个数据对象标记为删除,但是要等到 Context
提交更改时才真正删除数据对象
-deleteObject:
回滚最后⼀一步操作,这是都 undo/redo 的⽀支持
-undo还原数据⽂文件内容
-rollback
清除缓存的 Managed Objects。
只应当在添加或删除 Persistent Stores 时使⽤用
-reset执⾏行 Fetch Request 并返回所有匹配的数据对象!
-executeFetchRequest: error:
User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:context]; user.userID = @"1003"; user.age = @33; user.name = @"davie"; //添加mo对象 [context insertObject:user]; //删除mo对象 [context deleteObject:user]; //查询 //1.创建查询请求对象 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; //2.定义查询条件 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 25 && name LIKE 'd*'"]; request.predicate = predicate; //3.让context执行查询操作 NSArray *array = [context executeFetchRequest:request error:nil]; //修改 //1.将需要修改的MO查询出来 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; //定义条件,查询需要修改的用户 request.predicate = [NSPredicate predicateWithFormat:@"userID='1002'"]; NSArray *result = [context executeFetchRequest:request error:nil]; //2.修改 for (User *user in result) { user.name = @"张三"; user.age = @45; } //3.保存 [context save:nil]; //删除 //1.将需要删除的MO查询出来 //1.将需要修改的MO查询出来 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; //定义条件,查询需要修改的用户 request.predicate = [NSPredicate predicateWithFormat:@"userID='1002'"]; NSArray *result = [context executeFetchRequest:request error:nil]; //2.删除 for (User *user in result) { //将user从context中删除 [context deleteObject:user]; } //3.保存 [context save:nil];
-com.apple.CoreData.SQLDebug
1