02-CoreData 的增删改查
CoreData 的增删改查
基本的增删改查的操作
1 数据库的创建
- (void)createDB
{// 1.1 创建路径NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"AT_CoreDataDemo1" withExtension:@"momd"];// 1.2 根据模型文件路径创建模型对象NSManagedObjectModel *model = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];// 2.1 创建持久化存储器 管理数据库// 传入模型的对象NSPersistentStoreCoordinator *storeCoord = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];// 3 数据库存放的路径// doc 文件夹路径NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];// 数据库路径NSString *sqlPath = [docStr stringByAppendingPathComponent:@"student.sqlite"];// 4 设置数据库相关的信息// 存储器sqlite 类型NSError *error = nil;[storeCoord addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlPath] options:nil error:&error];if (!error) {NSLog(@"数据库创建成功--%@",sqlPath);}else{NSLog(@"数据库创建失败");}// 创建上下文 对数据库进行操作NSManagedObjectContext *context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];// 关联协调器context.persistentStoreCoordinator = storeCoord;// 关联全局的上下文 以便于操作数据库_context = context;}
2 插入数据
// 插入一条数据操作
- (IBAction)insertAction:(UIButton *)sender {// 1.根据Entity名称和NSManagedObjectContext获取一个新的继承于NSManagedObject的子类StudentStudent *stu = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_context];stu.name = [NSString stringWithFormat:@"编号%d",arc4random()% 1000];stu.age = [[NSString stringWithFormat:@"%d",arc4random()% 100] integerValue];// stu.sex = (arc4random()%100) / 2 ? @"男":@"女";//2 查询所有的请求NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Student"];// 执行操作NSError *error = nil;[_context executeRequest:req error:&error];[_dataSource removeAllObjects];[_dataSource addObjectsFromArray:[_context executeFetchRequest:req error:nil]];[self.tableView reloadData];// 3 讲数据插入到数据库NSError *error2= nil;if ([_context save:&error2]) {NSLog(@"保存数据成功");}else{NSLog(@"保存数据失败");}NSLog(@"%@",_dataSource);}
2 更新数据
// 更新数据操作
- (IBAction)updateAction:(UIButton *)sender {// 1 创建查询请求NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Student"];// 不添加任何条件的查询就是讲所有的数据查询出来// 使用谓词 过滤条件NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > %d", 50];req.predicate = pre;// 1.1 请求结果NSArray *resArr = [_context executeFetchRequest:req error:nil];// 2 更新数据for (Student *stu in resArr) {stu.name = @"标记:年龄已经大于50的人";}[_dataSource removeAllObjects];[_dataSource addObjectsFromArray:resArr];// 3 进行保存操作NSError *error= nil;if ([_context save:&error]) {NSLog(@"保存数据成功");}else{NSLog(@"保存数据失败");}}
3 删除数据
- (IBAction)deleteAction:(UIButton *)sender {// 1 创建删除请求NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Student"];// 不添加任何条件的查询就是讲所有的数据查询出来// 使用谓词 过滤条件NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > %d && age < %d", 40,60];req.predicate = pre;NSArray *resArr = [_context executeFetchRequest:req error:nil];[_dataSource removeAllObjects];[_dataSource addObjectsFromArray:resArr];[self.tableView reloadData];// 2 查询出来的数据进行删除操作for (Student *stu in resArr) {[_context deleteObject:stu];}// 3 进行操作操作NSError *error= nil;if ([_context save:&error]) {NSLog(@"删除数据成功");}else{NSLog(@"删除数据失败");}}
4 排序数据
- (IBAction)orderAction:(UIButton *)sender {//创建排序请求NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];//实例化排序对象 将年龄按照升序排列NSSortDescriptor *ageSort = [NSSortDescriptor sortDescriptorWithKey:@"age"ascending:YES];// 可以添加多个筛选条件request.sortDescriptors = @[ageSort];NSArray *resArray = [_context executeFetchRequest:request error:nil];[_dataSource removeAllObjects];_dataSource = [NSMutableArray arrayWithArray:resArray];[self.tableView reloadData];}
5 查询数据
// 查询数据
- (IBAction)queryAction:(UIButton *)sender {/* 谓词的条件指令1.比较运算符 > 、< 、== 、>= 、<= 、!=例:@"number >= 99"2.范围运算符:IN 、BETWEEN例:@"number BETWEEN {1,5}"@"address IN {'shanghai','nanjing'}"3.字符串本身:SELF例:@"SELF == 'APPLE'"4.字符串相关:BEGINSWITH、ENDSWITH、CONTAINS例: @"name CONTAIN[cd] 'ang'" //包含某个字符串@"name BEGINSWITH[c] 'sh'" //以某个字符串开头@"name ENDSWITH[d] 'ang'" //以某个字符串结束5.通配符:LIKE例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].@"name LIKE[cd] '???er*'"*注*: 星号 "*" : 代表0个或多个字符问号 "?" : 代表一个字符6.正则表达式:MATCHES例:NSString *regex = @"^A.+e$"; //以A开头,e结尾@"name MATCHES %@",regex注:[c]*不区分大小写 , [d]不区分发音符号即没有重音符号, [cd]既不区分大小写,也不区分发音符号。7. 合计操作ANY,SOME:指定下列表达式中的任意元素。比如,ANY children.age < 18。ALL:指定下列表达式中的所有元素。比如,ALL children.age < 18。NONE:指定下列表达式中没有的元素。比如,NONE children.age < 18。它在逻辑上等于NOT (ANY ...)。IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。比如,name IN { 'Ben', 'Melissa', 'Nick' }。提示:1. 谓词中的匹配指令关键字通常使用大写字母2. 谓词中可以使用格式字符串3. 如果通过对象的keypath指定匹配条件,需要使用%K*/// 1 创建查询请求NSFetchRequest *req =[NSFetchRequest fetchRequestWithEntityName:@"Student"];// 过滤条件NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > 80"];req.predicate = pre;// 通过这个属性实现分页//request.fetchOffset = 0;// 每页显示多少条数据//request.fetchLimit = 6;NSArray *resArray = [_context executeFetchRequest:req error:nil];_dataSource = [NSMutableArray arrayWithArray:resArray];[self.tableView reloadData];}
6 获取查询条件的数据数
在开发过程中,有时候只需要所需数据的count值,如果像之前一样获取所有对象加载到内存,在去遍历是比较消耗内存的。
苹果提供了两种方式,去直接查询count值,count值的查询是在数据库层面完成的,不需要将托管对象加载到内存中,避免内存的大开销。
- resultType 通过设置NSFetchRequest 对象的resultType 来获取count 值
// 1 创建查询请求NSFetchRequest *req =[NSFetchRequest fetchRequestWithEntityName:@"Student"];// 过滤条件NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > 80"];req.predicate = pre;// 设置查询获取数量req.resultType = NSCountResultType;// 只查询数量 不查询对象NSArray *resArray = [_context executeFetchRequest:req error:nil];// 执行查询操作,数组中只返回一个对象,就是计算出的count 值NSInteger count = [resArray.firstObject integerValue];NSLog(@"count--%ld",count);
2 直接调用countForFetchRequest 方法获取数量
// 1 创建查询请求NSFetchRequest *req =[NSFetchRequest fetchRequestWithEntityName:@"Student"];// 过滤条件NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > 80"];req.predicate = pre;// 只查询数量 不查询对象NSArray *resArray = [_context executeFetchRequest:req error:nil];// 执行查询操作,数组中只返回一个对象,就是计算出的count 值NSUInteger count = [_context countForFetchRequest:req error:nil];NSLog(@"count--%ld",count);
相关文章:

Lemon开源OA
http://www.mossle.com/index.html 转载于:https://www.cnblogs.com/gzmg/p/3770882.html

UC浏览器代理流量解密
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 解密uc浏览器的安全代理流量,看看是不是真安全。”作为一个从上古网络时代过来的人,一定对UC浏览器有深刻印象,它的流量透明代理功能,就是现在的云加速功能,使用UC的服务…

JAVA07 接口与继承
一 动手实验:继承条件下的构造方法调用 1)源代码 1 public class TestInherits {2 3 public static void main(String[] args) {4 // TODO Auto-generated method stub5 6 Child c new Child();7 }8 9 } 10 11 class GrandPa…

学习-现代交换原理与通信技术
帮助学习细化。。。 首先,这书真是难读,像个词典嘛似乎《现代交换原理与通信技术》卞佳丽 北邮 呵呵 呵了个呵 不过词典也有词典的好处 第三章,数字程控电话交换与通信网络 1. 控制子系统 与 话路子系统 前者在于控制,后者在于数…

03-NSPredicate谓词
NSPredicate 谓词 在查询数据的过程中,给NSFetchRequest设置一个过滤条件,不需要讲所有的托管对象加载到内存中去。这样的话就会节省内存和加快查找速度。 一 运算符 1 比较运算符 、< 、 、> 、< 、! 比如说age>80 NSPredicate *pre […

小兵别嚣张,签名算法分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析unity3d游戏小兵别嚣张的签名算法。”不久前,写了个unity3d的引子,介绍了使用工具从unity3d游戏中提取出各种资源和算法:unity3d游戏IL2CPP相关算法简单分析不过内容很少,今天介…

NOIP模拟题——B
【题目描述】我们要从n种食物选m个出来,安排一个顺序吃掉它(们),每种食物有个美味值ai,然后我们有k个规则,每个规则有 xi, yi 和 ci三个数,如果吃完第xi种食物接下来马上吃第yi种食物࿰…

Maven使用常用命令
> mvn clean删除target文件夹> mvn clean test编译测试代码,默认被放到target/test-classes文件夹下面> mvn clean compile编译主代码,并放到target/classes文件夹下> mvn clean package打包代码,我们可以看到target文件下生成了…
04- CoreData轻量级版本的迁移
CoreData版本的迁移 一 轻量级的数据迁移 例如添加新的实体,新的实体属性。 轻量级版本迁移方案非常简单,大多数迁移工作都是由系统完成的,只需要告诉系统迁移方式即可。在持久化存储协调器(PSC)初始化对应的持久化存储(NSPersistentStore…

通da信TCP长连接数据算法分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 分析通da信TCP长连接内部分数据的算法。”作为一款老牌的炒股软件,通da信里面的数据是相当的丰富,免费的也很丰富,准确性也很好,例如,这种股票之间关联的信息。通da信一…

产品经理怎么样用图表传达数据信息(多图)
上文有点仓促了,结尾没有写好。补上: 对劣质成本分析的时候应该注意: 1、在进行劣质成本分析的时候,要注意区分成本和必要的浪费。要注意一个关系,对必要浪费的控制会导致其他成本的上升。例如前文说到四小时送一次货&…

'This NSPersistentStoreCoordinator has no persistent stores 报错
可能是你改变coredata的属性项之后再运行的话在模拟器中会出现这个问题。找上面说的,找到mac下的模拟器中的程序路径,然后删掉其sqlite文件再运行就好了!!!

tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?
用wireshark 抓包,看看tcp 断开连接的过程. 以前书上说tcp断开连接,4次握手,可我为什么wireshark 只能抓到3个包? 百度一下,别人也有类似的疑问。 【求助】书上和网上的资料说,TCP拆除连接需要四次握手。但…

如何在python开发的GUI界面程序中恰当地使用PyExecJS
点击上方↑↑↑蓝字[协议分析与还原]关注我们“解决一闪而过的黑框的小技巧。”在使用python开发过程中,不可避免地,会开发带界面的应用,也会经常使用js来完成一些功能,比如,我使用python开发个了一个小应用࿱…

switch和case的理解
下面是复习java基础知识的时候,发现的一些点,总结下,备忘 int a345;switch (a) {case 23:System.out.println("23"); // break;case 345://条件符合,下面的case条件不会在判断,直接执行;System…

05-自己创建mapmodel自定义迁移方式
自动创建Mapping 如果模型的改变很大或者不支持轻量级数据迁移的条件,则我们需要进行自定义迁移。 使用映射模型 适用于更加复杂的数据的迁移 NSMappingModel 类似于数据模型 NSEntityMapping 告知迁移过程如何在目标数据存储中处理源实体的映射。 映射类型决…

Linux内核之内存管理(4)--缺页处理程序
本文主要解说缺页处理程序,凝视足够具体,不再解释。 //以下函数将一页内存页面映射到指定线性地址处,它返回页面的物理地址 //把一物理内存页面映射到线性地址空间指定处或者说把线性地址空间指定地址address处的页面映射到主内存区页面page上…

WebSocket协议分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 解析websocket数据格式。”好久不见,一晃一年又过去了,祝大家新年好运。今天,给大家分析一个常见的协议——WebSocket,这是一个标准协议,虽然没有HTTP历史悠久ÿ…

《postfix邮件服务下mailq、postmap、postqueue 、 postsuper等用法》
1、Mailq 功能说明:显示待寄邮件的清单。 语 法:mailq [-q] 补充说明:mailq可列出待寄邮件的清单,包括邮件ID,邮件大小,邮件保存时间,寄信人,收信人,以及邮件无法寄出…

[deviceone开发]-一个很炫的手势动画示例
一、简介 这是iOS下的效果,android下完全一致。通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手势控制图片上下动画滑动实现开合效果,还支持声音效果。 二、效果图 三、相关下…
iOS lldb调试
LLDB 初始 LLDB 是一个有着 REPL 的特性和 C ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的…

万物之中,希望至美
一觉醒来,虎年就这么来了。感谢各位朋友过去的一年与我同在。在新的一年到来之际,我首先做个检讨,过去的一年,我们这个公众号,更新不够频繁,属于三天打鱼两天晒网型公众号,没有为大家带来足够丰…

[转]VS2015编译的程序在其他机器上缺少msvcp120.dll
http://www.lai18.com/content/1159618.html 1、 今天分享一个自己在开发过程中遇到的困难。用VS2015开发了一个windows客户端(win32项目),在自己的机器上运行很流畅。当你得意的把releas版本进行打包,并进行发布后,问…

Discuz!的cookie机制
最近在做Discuz!的插件,需要用到cookie,一直觉得奇怪的一个问题,Discuz!大量使用了cookie,但是我在编写插件的时候如果不加入session_start函数cookie就无法使用,按理说Discuz!使用了这么多cookie它的核心应该有调用se…

iOS infoplist 权限设置
<dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>NSBluetoothPeripheralUsageDescription</key> <string>需要使用您的蓝牙</string> <key>NSCalendarsUsageDes…

python使用socket实现协议TCP长连接框架
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 使用python实现协议中常见的TCP长连接框架。”分析多了协议就会发现,很多的应用,特别是游戏类和IM类应用,它们的协议会使用长连接的方式,来保持客户端与服务器的联系,这…

哈夫曼编码与解码
这是我的第一篇博客,希望大神们批评指正。 首先介绍以下什么是哈夫曼树(来自百度百科) 哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一…

012-python基础-数据运算
1、算数运算: 2、比较运算 3、赋值运算 4、逻辑运算 5、成员运算: 6、身份运算: 7、位运算: 8、运算符优先级: 转载于:https://www.cnblogs.com/chhphjcpy/p/6064572.html

优化XCode的编译速度
1.将Debug Information Format改为DWARF 在工程对应Target的Build Settings中,找到Debug Information Format这一项,将Debug时的DWARF with dSYM file改为DWARF。 这一项设置的是是否将调试信息加入到可执行文件中,改为DWARF后,如…

给windows装个Mac黑苹果虚拟机
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ windows下安装使用苹果Mac虚拟机。”平常的生活工作中,我大部分时候使用Windows,偶尔用用Mac。实在是用不惯Mac,但有的时候,有些工作还是需要在Mac上搞,不得不用&#x…