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