ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接

这里是只是代码,因为博客插入图片效果不是很好,我自己写的总结比较详细,有兴趣的朋友可以在评论里留下邮箱,我收到后会发给大家。

转载注明出处,重视原创者的劳动成果,谢谢!

- (void)viewDidLoad {

[super
viewDidLoad];

[self
_creatTable];//插入数据

//    [self _query];// 查询数据

// KVC很霸道,即使readonly通过kvc也可赋值,kvo精华

//    Book * book = [[Book alloc]init];

////    book.name = @"book1";

//    [book setValue:@"book2" forKey:@"name"];

//    NSLog(@"%@",book.name);

}

#pragma mark - _query查询

- (void)_query{

//
初始化模型

NSManagedObjectModel * model = [NSManagedObjectModel
mergedModelFromBundles:nil];

//
创建基础库协调器

NSPersistentStoreCoordinator * psc = [[NSPersistentStoreCoordinator
alloc]initWithManagedObjectModel:model];

//
获取沙盒路径

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)
firstObject];

path = [path stringByAppendingPathComponent:@"coreData.sqlite"];

NSLog(@"%@",path);

NSURL * url = [[NSURL
alloc]initFileURLWithPath:path];

//为协调器加载基础库路径和基础库类型

[psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url options:nil
error:nil];

//
创建上下文

NSManagedObjectContext * context = [[NSManagedObjectContext
alloc]init];

context.persistentStoreCoordinator = psc;

//
初始化查询请求

NSFetchRequest * request = [[NSFetchRequest
alloc]initWithEntityName:@"Teacher"];

//
谓词过滤(查询条件)

#pragma mark ‘=‘

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name = %@",@"zhangks"];

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name = ‘zhangks‘"];

#pragma mark ‘>‘

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"age  >10"];

//        NSPredicate * predict = [NSPredicate predicateWithFormat:@"name  in %@",@[@"zhangsk",@"jack"]];

#pragma mark ‘like‘模糊查询

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name like %@",@"zha*"];

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name like %@",@"*zha*"];

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name like %@",@"*zha"];

#pragma mark ‘and‘和‘&&‘模糊查询

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name = %@ and age = 19",@"zhangks"];

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"name = %@ && age = 19",@"zhangks"];

#pragma mark ‘between‘模糊查询

//
方式1

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"age between {20,30}"];

//
方式2

//    NSPredicate * predict = [NSPredicate predicateWithFormat:@"age between %@",@[@"10",@"29"]];

//    predict = [NSPredicate predicateWithFormat:predict.predicateFormat];

//    request.predicate = predict;

//
数据排序 ascending=YES顺序,ascending=NO倒序

NSSortDescriptor * sort = [NSSortDescriptor
sortDescriptorWithKey:@"name"
ascending:YES];

request.sortDescriptors =
@[sort];

NSError * error ;

//
执行查询语句

NSArray * array = [context
executeFetchRequest:request error:&error];//
查询结果返回的是数组

//    NSInteger count = [context countForFetchRequest:request error:&error];

//
查询结果的个数,返回nsinteger

//    NSLog(@"%li",count);

/*

//    // KVC方式获取

//    for (NSManagedObject * student in array) {

//        NSLog(@"————————————————————%@,%li",[student valueForKey:@"name"],[[student/Users/zhangxin/Desktop/OC/UI/5.19/5.21coreData/testtestcoredata/testtestcoredata/ViewController.m valueForKey:@"age"] integerValue]);

//    }

//    // 子类KVC方式获取

//    for (Student * student in array) {

//        NSLog(@"%li,%@",[student.age integerValue],[student valueForKey:@"name"]);

//    }

*///KVC

//
通过映射对象获取

for (Teacher * teacher
in array) {

NSLog(@"%@",teacher.name);

}

}

#pragma mark _creatTable

- (void)_creatTable{

//
初始化模型

NSManagedObjectModel * model = [NSManagedObjectModel
mergedModelFromBundles:nil];

//
创建基础库协调器

NSPersistentStoreCoordinator * psc = [[NSPersistentStoreCoordinator
alloc]initWithManagedObjectModel:model];

//
获取沙盒路径

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)
firstObject];

path = [path stringByAppendingPathComponent:@"coreData.sqlite"];

NSLog(@"%@",path);

NSURL * url = [[NSURL
alloc]initFileURLWithPath:path];

//为协调器加载基础库路径和基础库类型

[psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url options:nil
error:nil];

//
创建上下文

NSManagedObjectContext * context = [[NSManagedObjectContext
alloc]init];

context.persistentStoreCoordinator = psc;

//    //
插入数据

//    NSManagedObject * student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];

//    [student setValue:@"zhangks" forKey:@"name"];

//    [student setValue:@(19) forKey:@"age"];

//

//    NSManagedObject * teacher = [NSEntityDescription insertNewObjectForEntityForName:@"Teacher" inManagedObjectContext:context];

//    [teacher setValue:@"zhqo" forKey:@"name"];

//
插入数据 新建 NSManagedObject subclass类 ,自动根据model中entity(实体)的表创建出类(继承自NSManagedObject,拥有NSManagedObject的属性和方法)所以直接用类名创建即可

//    Student * student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];

//    student.name = @"jack";

//    student.age = @(29);

//

//

//

//    Teacher * teacher = [NSEntityDescription insertNewObjectForEntityForName:@"Teacher" inManagedObjectContext:context];

//    teacher.name = @"limei";

//
初始化查询请求

NSFetchRequest * request = [[NSFetchRequest
alloc]initWithEntityName:@"Teacher"];

//
谓词过滤(查询条件)

//        NSPredicate * predict = [NSPredicate predicateWithFormat:@"name = ‘limei‘"];

//    request.predicate  = predict;

NSArray * array = [context
executeFetchRequest:request error:nil];

for (Teacher * teacher
in array) {

Student * student1 = [NSEntityDescription
insertNewObjectForEntityForName:@"Student"
inManagedObjectContext:context];

student1.name =
@"jim";

student1.age =
@(12);

student1.relationship = teacher;

NSLog(@"%@,%@",teacher.name,student1.relationship.name);

////        teacher.name = @"liuwu";

////        [context deleteObject:teacher];

//

}

//   NSSet * deleteSet = [context deletedObjects];//
删除(未save),执行删除语句后未保存前,缓存中(库表未修改)存储的删除数据

//   NSSet * insertSet = [context insertedObjects];//同上

//
保存

NSError * error;

[context
save:&error];

}

ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接ios
CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接

时间: 2024-12-26 21:27:14

ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接的相关文章

数据的增删改查(三层)

进行数据操作必然少了对数据的增删改查,用代码生成器生成的代码不是那么满意!方便在今后使用,这里就主要写“数据访问层(Dal)” 注:这里由于是用于用于测试时,临时建的数据库用于测试使用,在实际使用过程中些许改点参数就可以使用了 /// <summary> /// 是否存在该记录 /// </summary> public bool Exists(long Id) { string sql = "select count(*) Name from t_temp where

yii中数据的"增删改查"相关工作!(此文比较乱,需细看)

使用findByPk()根据数据表主键查询的是对象,不需要使用foreach()循环出来 但是使用findall()和find()查询的是对象类型的数组需要使用foreach()循环出来 ======================================= public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCommand($sql); $query = $r

Mybatis学习总结(二)—使用接口实现数据的增删改查

在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num信息.而personMapper则是该实体类的一个配置文件.需要注意的是,在上一篇博文中,namespace属性的值是其本身,而在这一篇中,使用的是接口.那么两者有什么区别呢?使用接口,那么相关的操作方法不用自己去实现,只需要调用该接口的相关的方法就能够实现相应的功能. 那么,在这里就有一个问题,接

Node.js + MySQL 实现数据的增删改查

通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-crud && cd $_ $ yarn init -y && npx gitignore node 上面的命令创建了一个空文件夹 node-crud,进入之后初始化一个 package.json 以及创建 .gitignore 文件. 安装 Koa 并创建 app.js 以启动一个

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

CoreData的简单使用(二)数据的增删改查,轻量级的版本迁移

上一篇中我们已经使用CoreData创建了一个SQLite数据库 CoreData的简单使用(一)数据库的创建 现在对数据库进行数据的CRUD(增删改查) 1.Data Model 的设置 创建一个DataModel,取名CRUD.xcdatamodeld,添加Entity(Library和Book),添加属性,在Book中设置和Library的关联关系(一个Book可以存放在一个Library里) Book的属性和关联关系(选择Destination为Library,关系名称取名为librar

django框架学习:12.数据操作增删改查

前言 django的modles模块里可以新增一张表和字段,通常页面的操作都是源于数据库的增删改查,怎样通过django实现数据库的增删改查呢? 数据库新增数据 上一篇我们创建了ke24_user表,将use_name ="liushui",psw ="123456",mail = "[email protected]" 在urls同级目录下创建testdb.py 文件,创建add_user方法如下: 给上面创建的方法在urls.py创建一个访问

java使用原生MySQL实现数据的增删改查

一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> 1.2 jdbc.propert

linq的创建 和 数据的增删改查

1.linq创建之前,一定要在sql做好数据表的主外键关系. 2.linq文件是以.dbml结尾,一般一个数据库的名字就是一个linq的名字 3,以实例来演示增删改查 数据库的名字为linq,里面有两个表Users(UserName,Password,Sex,NickName,Birthday,Nation)和Nation(NationCode,NationName) (1)创建名为linq的linq. 创建完之后啥也不用改,如果需要在重新封装类和数据扩展,那就想以前重新建立Users和User