频繁的网络请求会给用户不好的体验,在最近开发的一个项目中有一个获取个人详细信息的界面,由于是子页面,进入页面后需要重新加载数据并刷新页面,而,每一次请求服务器再返回数据不仅用户体验不好,也花费手机流量,所以尝试使用一下FMDB。简单看了下别人的博客和官方DEMO,自己尝试将FMDB加入到项目里面去。

  创建DB:

-(NSString *)dbPath
{
static NSString *_path;
if (_path) {
return _path;
}
  //获取程序路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:];
NSString *dbPath = [documentDirectory stringByAppendingString:@"MSProduct.db"];
_path = dbPath;
return _path;
}
    NSString *dbPath = [self dbPath];
  //根据路径创建一个数据库对象
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
return db;

  创建Table:

    NSString SQL = @"CREATE TABLE IF NOT EXISTS tableName (uid integer,name text,photo text)";
FMDatabase *db = [self createDB];
if ([db open]) {
return [db executeUpdate:SQL];
}

  字段类型,text,integer,blob,当然其他的我也不清楚,也没去研究。项目里面目前用到了text和integer。 db的executeUpdate方法就是执行SQL语句,其实不只创建Table用到这个方法,删除数据,添加,修改等都可以使用这个方法,查看FMDB源代码可以看到还有其他“重载”方法

- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;

- (BOOL)executeUpdate:(NSString*)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error;

- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments;

- (BOOL)executeUpdate:(NSString*)sql withVAList: (va_list)args;

  其实只要掌握了SQL语句的使用,那么掌握FMDB的基本功能还不算太难。像删除语句 :DELETE FROM TABLE WHERE 1=1 修改语句 :UPDATE TABLE SET NAME = 'newname' WHERE 1=1

  最后还有一个查询,查询结果都放在 FMResultSet 中,它有一个 next 方法,循环遍历每一行(row)数据。示例代码:

    NSString *querySQL =[NSString stringWithFormat:@"SELECT * FROM %@ WHERE cvnumber=%ld",kMSTableNameUserInfo,cvnumber];
FMResultSet *result = [[MSDataBase sharedMSDataBase] queryData:querySQL]; //FMResultSet *result = [db executeQuery:SQL];
    MSUserCard *user = [[MSUserCard alloc] init];
while ([result next]) {
user.cvnumber = [result intForColumn:@"cvnumber"];
user.name = [result stringForColumn:@"name"];
user.headphoto = [result stringForColumn:@"headphotos"];
user.company = [result stringForColumn:@"company"];
user.email = [result stringForColumn:@"email"];
user.mobile = [result stringForColumn:@"mobile"];
user.position = [result stringForColumn:@"position"];
user.landline = [result stringForColumn:@"landline"];
user.weixin = [result stringForColumn:@"weixin"];
user.address = [result stringForColumn:@"address"];
user.ability = [result stringForColumn:@"ability"];
user.achieve = [result stringForColumn:@"achieve"];
user.identitytitle = [result stringForColumn:@"identitytitle"];
user.hidemobile = [result intForColumn:@"hidemobile"];
}

上述例子是获取单条数据的。当然多条同样适用,只要读取出来,剩下的随便操作了。FMResultSet其他方法

- (int)columnCount;

- (int)columnIndexForName:(NSString*)columnName;

- (NSString*)columnNameForIndex:(int)columnIdx;

- (int)intForColumn:(NSString*)columnName;

- (int)intForColumnIndex:(int)columnIdx;

- (long)longForColumn:(NSString*)columnName;

- (long)longForColumnIndex:(int)columnIdx;

- (long long int)longLongIntForColumn:(NSString*)columnName;

- (long long int)longLongIntForColumnIndex:(int)columnIdx;

- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName;

- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx;

- (BOOL)boolForColumn:(NSString*)columnName;

- (BOOL)boolForColumnIndex:(int)columnIdx;

- (double)doubleForColumn:(NSString*)columnName;

- (double)doubleForColumnIndex:(int)columnIdx;

- (NSString*)stringForColumn:(NSString*)columnName;

- (NSString*)stringForColumnIndex:(int)columnIdx;

- (NSDate*)dateForColumn:(NSString*)columnName;

- (NSDate*)dateForColumnIndex:(int)columnIdx;

- (NSData*)dataForColumn:(NSString*)columnName;

- (NSData*)dataForColumnIndex:(int)columnIdx;

- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName;

- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx;

- (id)objectForColumnName:(NSString*)columnName;

- (id)objectForColumnIndex:(int)columnIdx;

  最后,将FMDB应用到我开头提到的例子上,读取数据先从本地数据库读取,如果有数据,就使用。如果没有就访问网络获取数据,然后将数据保存到本地的数据库表中。下次进来的时候就不会再请求网络数据了。那么什么时候更新本地数据库就看具体的业务需求了。

FMDB初步使用小结的更多相关文章

  1. FFT初步学习小结

    FFT其实没什么需要特别了解的,了解下原理,(特别推荐算法导论上面的讲解),模板理解就行了.重在运用吧. 处理过程中要特别注意精度. 先上个练习的地址吧: http://vjudge.net/vjud ...

  2. 初步自学Java小结

    本周学习Java使我印象最深刻的Java开发环境的安装与设置,通过下载Eclipse IDE for Java Developers初步搭建好了Java开发环境,之后利用视频了解了Java程序的类型及 ...

  3. FMDB的一些基本操作小结

    http://blog.csdn.net/iunion/article/details/7204625 仅供自己记录使用, h文件 #import <Foundation/Foundation. ...

  4. Spring Boot 初步小结

    Spring Boot 是一种开发模式,不涉及任何新的技术 1.了解自动配置的原理 2.常用application.yml文件的配置项 3.Spring Boot 及 第三方提供的各种 starter ...

  5. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  6. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  7. NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  8. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  9. Lasso回归算法: 坐标轴下降法与最小角回归法小结

    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...

随机推荐

  1. 基于setTimeout制作滚动广告板

    很多网站在其门户页面的上方正中央都会放置一个滚动广告板,用于显示一些推荐信息,用户点击即可进入浏览.比较常见的就是各个公司的官网,电商网站的首页等. 下面是天猫的滚动广告板截图. 其实,不需要借助于什 ...

  2. 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...

  3. 32位x86处理器编程导入——《x86汇编语言:从实模式到保护模式》读书笔记08

    在说正题之前,我们先看2个概念. 1.指令集架构(ISA) ISA 的全称是 instruction set architecture,中文就是指令集架构,是指对程序员实际"可见" ...

  4. pom.xml无法引入本地的jar和安装到本地安装maven 错误: 找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher

    今天maven突然无法引入本地maven库的jar包,导致maven工程出错,然后就准备重装maven ,开始只是将环境变量删除,将之前的压缩包解压,再重新配置环境 变量,可是配置好后在dos窗口 输 ...

  5. 1分钟搭建极简mock server

    1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果在联调的时候,恰好被调的接口正在开发,怎么办?傻傻的等么,不存在的!这时会搭建一些server来进行mock ...

  6. uwsgi服务启动、关闭、重启操作

    1.      添加uwsgi相关文件 在之前的文章跟讲到过centos中搭建nginx+uwsgi+flask运行环境,本节就基于那一次的配置进行说明. 在www中创建uwsgi文件夹,用来存放uw ...

  7. [转] CentOS下添加用户并且让用户获得root权限

    http://www.centoscn.com/CentOS/config/2014/0810/3471.html 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser ...

  8. jquery的$.getScript在IE下的缓存问题

    jquery的$.getScript在IE下的缓存问题

  9. mvc表单如何绑定bool类型的属性或变量

    先来看一组代码: 视图代码: @model MvcTest.Controllers.Test @{ Layout = null; } <!DOCTYPE html> <html> ...

  10. web.config节点

    1.clientCache 源码: <system.webServer> <staticContent> <clientCache cacheControlMode=&q ...