iOS---基于对Sqlilte3的二次包装的第三次包装--->JKDBModel ,一个好用的离线缓存库
https://github.com/Joker-King/JKDBModel
1.将FMDB和DBModel拖入项目中,然后添加libsqlite3.dylib
|
#import "JKDBModel.h"
@interface WrksheetInfoModel : JKDBModel
|
3./** 数据库中是否存在表 */
+ (BOOL)isExistInTable;
/** 保存或更新 * 如果不存在主键,保存, * 有主键,则更新 */
- (BOOL)saveOrUpdate;
/** 保存单个数据 */
- (BOOL)save;
/** 批量保存数据 */
+ (BOOL)saveObjects:(NSArray *)array;
/** 更新单个数据 */
- (BOOL)update;
/** 批量更新数据*/
+ (BOOL)updateObjects:(NSArray *)array;
/** 删除单个数据 */
- (BOOL)deleteObject;
/** 批量删除数据 */
+ (BOOL)deleteObjects:(NSArray *)array;
/** 通过条件删除数据 */
+ (BOOL)deleteObjectsByCriteria:(NSString *)criteria;
/** 清空表 */
+ (BOOL)clearTable;/** 查询全部数据 */+ (NSArray *)findAll;
/** 通过主键查询 */
+ (instancetype)findByPK:(int)inPk;
/** 查找某条数据 */
+ (instancetype)findFirstByCriteria:(NSString *)criteria;
/** 通过条件查找数据 * 这样可以进行分页查询 @" WHERE pk > 5 limit 10" */
+ (NSArray *)findByCriteria:(NSString *)criteria;
/** * 创建表 * 如果已经创建,返回YES */
+ (BOOL)createTable;#pragma mark - must be override method
/** 如果子类中有一些property不需要创建数据库字段,那么这个方法必须在子类中重写 */
+ (NSArray *)transients;
4.使用示例
|
#pragma mark - 插入数据
/** 创建多条子线程 */ - (IBAction)insertData:(id)sender { for (int i = 0; i < 1; i++) { User *user = [[User alloc] init]; user.name = [NSString stringWithFormat:@"麻子%d",i]; user.sex = @"男"; user.age = 10+i; dispatch_async(dispatch_get_global_queue(0, 0), ^{ [user save]; }); } } /** 子线程一:插入多条用户数据 */ - (IBAction)insertData2:(id)sender { dispatch_queue_t q1 = dispatch_queue_create("queue1", NULL); dispatch_async(q1, ^{ for (int i = 0; i < 5; ++i) { User *user = [[User alloc] init]; user.name = @"赵五"; user.sex = @"女"; user.age = i+5; [user save]; } }); } - (IBAction)insertData3:(id)sender { for (int i = 0; i < 1000; ++i) { User *user = [[User alloc] init]; user.name = @"张三"; user.sex = @"男"; user.age = i+5; [user save]; } } /** 子线程三:事务插入数据 */ - (IBAction)insertData4:(id)sender { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i < 500; i++) { User *user = [[User alloc] init]; user.name = [NSString stringWithFormat:@"李四%d",i]; user.age = 10+i; user.sex = @"女"; [array addObject:user]; } [User saveObjects:array]; }); } #pragma mark - 删除数据 /** 通过条件删除数据 */ - (IBAction)deleteData:(id)sender { // [User deleteObjectsByCriteria:@" WHERE pk < 10"]; [User deleteObjectsWithFormat:@"Where %@ < %d",@"pk",10]; } /** 创建多个线程删除数据 */ - (IBAction)deleteData2:(id)sender { for (int i = 0; i < 5; i++) { User *user = [[User alloc] init]; user.pk = 1+i; dispatch_async(dispatch_get_global_queue(0, 0), ^{ [user deleteObject]; }); } } /** 子线程用事务删除数据 */ - (IBAction)deleteData3:(id)sender { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i < 500; i++) { User *user = [[User alloc] init]; user.pk = 501+i; [array addObject:user]; } [User deleteObjects:array]; }); } #pragma mark - 修改数据 /** 创建多个线程更新数据 */ - (IBAction)updateData1:(id)sender { for (int i = 0; i < 5; i++) { User *user = [[User alloc] init]; user.name = [NSString stringWithFormat:@"更新%d",i]; user.age = 120+i; user.pk = 5+i; dispatch_async(dispatch_get_global_queue(0, 0), ^{ [user update]; }); } } /**单个子线程批量更新数据,利用事务 */ - (IBAction)updateData:(id)sender { dispatch_queue_t q3 = dispatch_queue_create("queue3", NULL); dispatch_async(q3, ^{ NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i < 500; i++) { User *user = [[User alloc] init]; user.name = [NSString stringWithFormat:@"啊我哦%d",i]; user.age = 88+i; user.pk = 10+i; [array addObject:user]; } [User updateObjects:array]; }); } #pragma mark - 查询 /** 查询单条记录 */ - (IBAction)queryData1:(id)sender { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"第一条:%@",[User findFirstByCriteria:@" WHERE age = 20 "]); }); } /** 条件查询多条记录 */ - (IBAction)queryData2:(id)sender { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"小于20岁:%@",[User findByCriteria:@" WHERE age < 20 "]); }); } /** 查询全部数据 */ - (IBAction)queryData3:(id)sender { dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"全部:%@",[User findAll]); }); } /** 分页查询数据 */ - (IBAction)queryData:(id)sender { static int pk = 5; NSArray *array = [User findByCriteria:[NSString stringWithFormat:@" WHERE pk > %d limit 10",pk]]; pk = ((User *)[array lastObject]).pk; NSLog(@"array:%@",array); } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSString *title = @"查询"; int type = 3; if ([segue.identifier isEqualToString:@"One"]) { title = @"查询一条数据"; type = 1; } else if ([segue.identifier isEqualToString:@"Two"]){ title = @"条件查询"; type = 2; }else if ([segue.identifier isEqualToString:@"Three"]){ title = @"查询全部"; type = 3; }else if ([segue.identifier isEqualToString:@"Four"]){ title = @"分页查询"; type = 4; } QueryTableViewController *destVC = segue.destinationViewController; destVC.title = title; destVC.type = type; } |
|
1.模型属性全部用NSString修饰
2.模型属性赋值时
model.orderHisInfo = [[NSString alloc] initWithData:[UtilitytoJSONData:dic[@"orderHisInfo”]] encoding:NSUTF8StringEncoding]; //查看进程
3.取值时,取出来是数组或者字典
[Utility toArrayOrNSDictionary:[self.model.orderHisInfo dataUsingEncoding:NSUTF8StringEncoding]];
|
|
// 将JSON串转化为字典或者数组 数组转换字符串 + (id)toArrayOrNSDictionary:(NSData *)jsonData{ NSError *error = nil; id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; if (jsonObject != nil && error == nil){ return jsonObject; }else{ // 解析错误 return nil; } } // 将字典或者数组转化为JSON串 + (NSData *)toJSONData:(id)theData{ NSError *error = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData options:NSJSONWritingPrettyPrinted error:&error]; NSLog(@"%@", jsonData); if ([jsonData length] != 0 && error == nil){ return jsonData; }else{ return nil; } }
|
iOS---基于对Sqlilte3的二次包装的第三次包装--->JKDBModel ,一个好用的离线缓存库的更多相关文章
- IOS基于XMPP协议开发--XMPPFramewok框架(三):用户注册
接着上面说 用户注册是比较简单的,成功连接上服务器后,设置好JID,即可调用 [_xmppStream registerWithPassword:pwd error:&err] 进行注册 -( ...
- IOS基于XMPP协议开发--XMPPFramewok框架(一):基础知识
最近蘑菇街团队的TT的开源,使我对im产生了兴趣,然后在网上找到了XMPPFramework进行学习研究, 并写了以下系列教程供大家参考,有写的不对的地方,请大家多多包涵指正. 目录索引 IOS基于X ...
- 基于memcached的单机轻量级通用缓存库minicached的实现
一.前言 之前拜读过淘宝子柳的<淘宝技术这十年>之大作,深知缓存技术在系统优化中起着一个举足轻重的作用.无论是文件系统静态文件,数据库的访问,乃至网络数据的请求,只要是与内存访问速度相差较 ...
- iOS如何获取网络图片(二)
ios如何获取图片(二)无沙盒下 解决问题 *解决问题1:tableView滑动卡顿,图片延时加载 解决方法:添加异步请求,在子线程里请求网络,在主线程刷新UI *解决问题2:反复请求网络图片,增加用 ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- 【基于spark IM 的二次开发笔记】第一天 各种配置
[基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...
- iOS开发CoreAnimation解读之二——对CALayer的分析
iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二. ...
- 提供基于Lesktop的IM二次开发,联系QQ:87172811
提供基于Lesktop的IM二次开发,联系QQ:87172811
- ASP.NET Core 基于JWT的认证(二)
ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...
随机推荐
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- C语言 · Torry的困惑(基本型)
问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师 ...
- WebApi - 路由
这段时间的博客打算和大家一起分享下webapi的使用和心得,主要原因是群里面有朋友说希望能有这方面的文章分享,随便自己也再回顾下:后面将会和大家分不同篇章来分享交流心得,希望各位多多扫码支持和点赞,谢 ...
- CGI与FastCGI nginx+PHP-FPM
本文转载自CGI与FastCGI 1.当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html. ...
- addTwoNumbers
大神的代码好短,自己写的120多行=_= 各种判断 ListNode *f(ListNode *l1, ListNode *l2) { ListNode *p1 = l1; ListNode *p2 ...
- XAMARIN.ANDROID SIGNALR 实时消息接收发送示例
SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...
- 热修复-Nuwa学习篇
nuwa热修复是基于qq空间团队的思路,最近的热度话题了,很多种方案,自己先研究几种方案,基本上都各有优势,学习肯定得先挑个软柿子捏了,自己对比了一下,发现nuwa代码量少点,所以就决定了,先研究nu ...
- 跟着老男孩教育学Python开发【第四篇】:模块
双层装饰器示例 __author__ = 'Golden' #!/usr/bin/env python # -*- coding:utf-8 -*- USER_INFO = {} def ch ...
- NV显卡Ubuntu14.04更新软件导致登录死循环,不过可以进入tty模式
注意:此方法只适用于nv显卡的电脑! 在网上寻找各种方法无果的情况下,选择重新安装显卡驱动,成功登录进入图形界面. 一.首先需要在另外一台电脑(windows系统也可以)上下载NVIDIA相应显卡驱动 ...
- 烂泥:VMWare Workation双网卡配置IP地址
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天给一个客户做远程项目实施,客户那边的服务器是Windows OS的,我们这边的业务 ...