coreData实现增删除改查
来源:互联网 发布:导弹坐标系转换软件 编辑:程序博客网 时间:2024/06/05 12:39
首先要建立好模型,然后根据模型生成相应的类
然后打开数据库,并保存好上下文:
- (void)openDB{ /* ** Core Data的操作方式 1. 将所有定义好的数据模型文件合并成为一个数据模型(NSManagedObjectModel) 建立起针对实体对应的数据表的SQL语句,以便创建数据表 2. 用数据模型来创建持久化存储调度,此时就具备了创建表的能力 3. 为存储调度添加持久化的数据存储(SQLite数据库),如果没有,新建并创建数据表 如果已经存在,直接打开数据库。 在打开数据库之后,会判断实体当前的结构与数据表的描述结构是否一致,如果不一致,会提示打开失败! */ // 创建数据库 // 1. 实例化数据模型(将所有定义的模型都加载进来) // merge——合并 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; // 2. 实例化持久化存储调度,要建立起桥梁,需要模型 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; // 3. 添加一个持久化的数据库到存储调度 // 3.1 建立数据库保存在沙盒的URL NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [docs[0] stringByAppendingPathComponent:@"my.db"]; NSURL *url = [NSURL fileURLWithPath:path]; // 3.2 打开或者新建数据库文件,如果文件不存在,则新建之后打开, 否者直接打开数据库 NSError *error = nil; [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]; if (error) { NSLog(@"打开数据库出错 - %@", error.localizedDescription); } else { NSLog(@"打开数据库成功!"); _context = [[NSManagedObjectContext alloc] init]; _context.persistentStoreCoordinator = store; }}
增加单个实体:
- (void)addPerson{ // 1. 实例化并让context“准备”将一条个人记录增加到数据库 Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context]; //2,设置好对象的属性 //... // 3. 保存(让context保存当前的修改) if ([_context save:nil]) { NSLog(@"新增成功"); } else { NSLog(@"新增失败"); }}
增加一对多的多个实体:
- (void)addPerson{ // 1. 设置一方的实体信息 Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context]; p.name = @"张老头"; p.age = @10; p.phoneNo = @"100"; p.image = UIImagePNGRepresentation([UIImage imageNamed:@"头像1"]); //2,准备多方的实体信息 Book *b = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:_context]; b.name = @"太极真经"; b.price = @20000.99; b.author = @"太极忽悠"; Book *b2 = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:_context]; b2.name = @"一阳神功"; b2.price = @0.99; b2.author = @"老忽悠"; //3,通过Set绑定一对多的关系 NSSet *bookSet = [NSSet setWithObjects:b, b2, nil]; p.books = bookSet; // 保存(让context保存当前的修改) if ([_context save:nil]) { NSLog(@"新增成功"); } else { NSLog(@"新增失败"); }}
查询操作:
- (void)allPersons{ // 1. 实例化一个查询(Fetch)请求 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 3. 条件查询,通过谓词来实现的// request.predicate = [NSPredicate predicateWithFormat:@"age < 60 && name LIKE '*五'"]; // 在谓词中CONTAINS类似于数据库的 LIKE '%王%'// request.predicate = [NSPredicate predicateWithFormat:@"phoneNo CONTAINS '1'"]; // 如果要通过key path查询字段,需要使用%K// request.predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '1'", @"phoneNo"]; // 直接查询字表中的条件 // 2. 让_context执行查询数据 NSArray *array = [_context executeFetchRequest:request error:nil];// 处理结果// for (Person *p in array) {// }}
修改记录:
- (void)updatePerson{ // 1. 实例化查询请求 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Book"]; // 2. 设置谓词条件 request.predicate = [NSPredicate predicateWithFormat:@"author CONTAINS '大忽悠'"]; // 3. 由上下文查询数据 NSArray *result = [_context executeFetchRequest:request error:nil]; // 4. 更新字段 for (Book *book in result) { NSLog(@"%@ %@ %@", book.name, book.author, book.price); book.name = @"西游记"; } // 通知上下文保存保存 [_context save:nil];}
删除操作
- (void)removePerson{ // 1. 实例化查询请求 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 2. 设置谓词条件 request.predicate = [NSPredicate predicateWithFormat:@"name = '张老头'"]; // 3. 由上下文查询数据 NSArray *result = [_context executeFetchRequest:request error:nil]; // 4. 处理结果 for (Person *person in result) { // 执行删除操作 [_context deleteObject:person]; break; } // 5. 通知_context保存数据 if ([_context save:nil]) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); }}
可见,增加,修改,删除都是通过保存上下文来达到目的的
0 0
- coreData实现增删除改查
- coreData增删改查
- CoreData增删查改
- CoreData“增删改查”
- CoreData 增删查改
- coreData增删改查正则
- CoreData的增删改查
- CoreData的增删改查
- 06-CoreData增删改查
- iOS CoreData增删改查
- Swift CoreData增删改查
- swift3 CoreData增删改查
- swift中使用CoreData实现增删查改
- (CoreData的使用,增删改查)
- CoreData使用笔记 之 增删改查
- ios coredata 增删改查代码
- CoreData总结-增删改查操作
- iOS CoreData的使用,增删改查
- Echarts ajax动态加载json数据
- 3. Browser 对象 - Navigator 对象
- 关于动画的切换可以用UIImageView中的属性来实现。
- 基于opencv的特征点匹配法
- 使用SQLServer2008R2进行缓存依赖通知需要注意事项
- coreData实现增删除改查
- VS2010装了VC助手后卡死,连系统界面都卡死界面方案
- NavigationControllerr滑动返回
- 喷水装置(一)【贪心】
- AMBA片上总线在基于IP复用的SoC设计中的应用
- 手把手创建自定义的分层的maven-archetype
- 栈
- Hbase数据导入导出
- Mysql常见水平分表方案