1.创建一个Data Model 文件
2.创建一个Entity,名为MyFirstEntity
3.为了防止崩溃,需要做如下操作:
4.创建Data Model文件包含的Entity
5.在你的ViewController里面操作数据库,ViewController的代码如下:
//
// ViewController.m
// TestCoreData
//
#import "ViewController.h"
#import "MyFirstEntity+CoreDataClass.h"
#import <CoreData/CoreData.h>
@interface ViewController ()
@property NSManagedObjectContext * context;
@property NSMutableArray * dataSource;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self createSqlite];
[self insertData];
NSLog(@"======查询数据=======");
[self queryData];
NSLog(@"======修改数据,before=======");
[self updateData];
NSLog(@"======查询修改后的数据=======");
[self queryData];
NSLog(@"======删除数据, before=======");
[self deleteData];
NSLog(@"======查询删除后的数据=======");
[self queryData];
}
//创建数据库
- (void)createSqlite{
//1.创建模型对象URL,第一个参数是MyModel.xcdatamodeld文件的文件名
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyModel" withExtension:@"momd"];
//根据模型文件URLk来创建模型对象
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
//2.创建持久化存储助理:数据库
//利用模型对象创建助理对象
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
//数据库的名称和路径
NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlPath = [docStr stringByAppendingPathComponent:@"myCoreData.sqlite"];
NSLog(@"数据库的文件路径 = %@", sqlPath);
NSURL *sqlUrl = [NSURL fileURLWithPath:sqlPath];
NSError *error = nil;
//设置数据库相关信息 添加一个持久化存储库并设置类型和路径,NSSQLiteStoreType:SQLite作为存储库
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:nil error:&error];
if (error) {
NSLog(@"添加数据库失败:%@",error);
} else {
NSLog(@"添加数据库成功");
}
//3.创建上下文 保存信息 对数据库进行操作
_context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
//关联持久化助理
_context.persistentStoreCoordinator = store;
}
-(void) insertData {
// 1.根据Entity名称和NSManagedObjectContext获取一个新的继承于NSManagedObject的子类Student
MyFirstEntity * entity = [NSEntityDescription insertNewObjectForEntityForName:@"MyFirstEntity" inManagedObjectContext:_context];
//2.根据表Student中的键值,给NSManagedObject对象赋值
entity.name = [NSString stringWithFormat:@"csx-%d",arc4random()%100];
entity.age = arc4random()%20;
//3.保存插入的数据
NSError *error = nil;
if ([_context save:&error]) {
NSLog(@"%@", @"数据插入到数据库成功");
}else{
NSLog(@"%@", [NSString stringWithFormat:@"数据插入到数据库失败, %@",error]);
}
}
- (void)deleteData{
//创建删除请求
NSFetchRequest *deleRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyFirstEntity"];
//删除条件
NSPredicate *pre = [NSPredicate predicateWithFormat:@"age < %d", 20];
deleRequest.predicate = pre;
//返回需要删除的对象数组
NSArray *deleArray = [_context executeFetchRequest:deleRequest error:nil];
//从数据库中删除
for (MyFirstEntity *entity in deleArray) {
[_context deleteObject:entity];
}
NSError *error = nil;
//保存--记住保存
if ([_context save:&error]) {
NSLog(@"删除 age < 10 的数据");
}else{
NSLog(@"删除数据失败, %@", error);
}
}
//更新,修改
- (void)updateData{
//创建查询请求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MyFirstEntity"];
NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > %d", 1];
request.predicate = pre;
//发送请求
NSArray *resArray = [_context executeFetchRequest:request error:nil];
//修改
for (MyFirstEntity *entity in resArray) {
entity.name = @"haha";
}
//保存
NSError *error = nil;
if ([_context save:&error]) {
NSLog(@"把age>1 的MyFirstEntity实例的name更新为 haha");
}else{
NSLog(@"更新数据失败, %@", error);
}
}
//查询
-(void)queryData {
//创建查询请求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MyFirstEntity"];
//查询条件
NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > %d", 1];
request.predicate = pre;
//发送查询请求
NSArray *resArray = [_context executeFetchRequest:request error:nil];
NSLog(@"res = %@", resArray);
}
@end
运行结果如下: