使用FMDB保存首页数据

FD87DC16F4A42922C5DFDCCF96332A13.jpg

很多的APP都在没有网络的时候会保存上一次加载的数据,他们最常用的就是使用SQLite数据库,其中FMDB也是封装比较好的框架之一,下面来分享一下FMDB的使用!

  1. 下载并导入框架就没什么好说的了
  2. 创建一个管理的工具类(SQLiteManager)继承NSObject
    SQLiteManager.m 里面的内容如下,我写的是类方法,你也可以写对象方法,在弄一个单例什么的,写类方法主要是为了方便!

说一下项目的背景 :我们首页数据返回来的是一个json,通过框架直接转成了字典,领导要求只保存第一页数据就可以,所以我没有把所有的数据按照字段去解析存储,我是直接存储的json数据,也省去了以后的项目开发中增加新的字段,需要对数据库升级的麻烦只能说我比较懒废话说了这么多下面是代码!!!

/// 更新数据
///
/// @param data 数据
/// @param page 页码
+ (void)updateHomeData:(NSString *)data page:(NSUInteger)page;

/// 插入数据
///
/// @param data 数据
/// @param page 页码
+ (void)insertHomeData:(NSString *)data page:(NSUInteger)page;

/// 查询数据
+ (NSArray *)queryHomeData;

/// 删除数据
///
/// @param page 页码
+ (void)deleteHomeDataWithPage:(NSInteger)page;

3.在SQLiteManager.h文件中代码如下:

//定义一个全局对象
static FMDatabase *_db;

//该方法会在调用该类中方法的时候先调用
+ (void)initialize{
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"homeData.db"];

//1.创建库
_db = [FMDatabase databaseWithPath:dbFilePath];

//2.打开连接
BOOL result = [_db open];

if (result) {
    //3.创建表
    /**
     如果是创建表,新增数据,修改数据,删除数据,我们都一个方法
     executeUpdate
     如果是查询executeQuery
     */
    BOOL result2 = [_db executeUpdate:@"create table if not exists t_home(id integer primary key,data text not null,page integer not null);"];
    if (result2) {
        NSLog(@"创建表成功!!!");
    }
}

}

//添加数据
+ (void)insertHomeData:(NSString *)data page:(NSUInteger)page{
[_db executeUpdateWithFormat:@"insert into t_home(data,page) values(%@,%ld)",data,page];
}

//更新数据
+ (void)updateHomeData:(NSString *)data page:(NSUInteger)page{
[_db executeUpdateWithFormat:@"update t_home set data=%@,page = %ld",data,page];
}

//删除数据
+ (void)deleteHomeDataWithPage:(NSInteger)page{
[_db executeUpdateWithFormat:@"delete from t_home where page = %ld",page];
}
//查询数据
+ (NSArray *)queryHomeData{

FMResultSet *resultSet = [_db executeQuery:[NSString stringWithFormat:@"select * from t_home"]];
// 如果你想查询某个字段可以这么写(注意%号的个数)
//    FMResultSet *resultSet = [_db executeQuery:[NSString stringWithFormat:@"select * from t_home where name LIKE '%%%@%%'",zhangsan]];
NSMutableArray *homeDatas = [NSMutableArray array];

while (resultSet.next) {
    NSString *homeData = [resultSet stringForColumn:@"data"];
// 将字符串转换成对象(下面会说为什么存字符串!!!)
    NSData *data = [homeData dataUsingEncoding:NSUTF8StringEncoding];
    NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL];
    //将其添加到数组中
    [homeDatas addObject:array];
}

return homeDatas.copy;
}

4.使用FMDB(重点来了!!!)
在请求数据之前先加载数据库中的数据

// 取出数据库中的数据,判断是否有数据
NSArray *array = [SQLiteManager queryHomeData];
    if (array && array.count > 0) {
// 字典转模型
    InformationReturnData * returnData = [InformationReturnData mj_objectWithKeyValues:array.firstObject];
    self.listDataArray = returnData.data;
    [self.tableView reloadData];
}
else
{
    // 没有重数据库中加载到数据,向服务器请求数据
    [self requestDataWithPage:self.page];
}

5.下面是写入数据到数据库(肯定是在数据请求回来之后了~废话!)

NSError *err = nil;
// 此处是将对象转成json字符串写入到数据库中(数据库里不能存对象,你不会不知道吧~)
NSData *data = [NSJSONSerialization dataWithJSONObject:jsonData options:NSJSONWritingPrettyPrinted error:&err];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSInteger page = returnData.page;
// 删除之前的旧数据
[SQLiteManager deleteHomeDataWithPage:page];
// 保存新的数据
[SQLiteManager insertHomeData:jsonStr page:page];

总结:这个是我重项目里分离出来的,就没有demo了,欢迎大家点赞和评论,有不懂的直接留言,我也不一定会哈!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,310评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,123评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,711评论 18 139
  • 1、 前段时间,由于跟男朋友刚分别的愁苦加上裸辞后对未来不确定的恐慌,让我躲在出租屋里暗无天日,每次夜幕降临都会难...
    阿毛mao阅读 427评论 0 0
  • 我是一名超级热爱东方舞的舞蹈老师,我从小就喜欢各种舞蹈,喜欢做一名舞蹈家,长大了省吃检用赚的钱都去学舞蹈了,我20...
    青青蝶舞阅读 783评论 0 0