FMDB初步使用小结
频繁的网络请求会给用户不好的体验,在最近开发的一个项目中有一个获取个人详细信息的界面,由于是子页面,进入页面后需要重新加载数据并刷新页面,而,每一次请求服务器再返回数据不仅用户体验不好,也花费手机流量,所以尝试使用一下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初步使用小结的更多相关文章
- FFT初步学习小结
FFT其实没什么需要特别了解的,了解下原理,(特别推荐算法导论上面的讲解),模板理解就行了.重在运用吧. 处理过程中要特别注意精度. 先上个练习的地址吧: http://vjudge.net/vjud ...
- 初步自学Java小结
本周学习Java使我印象最深刻的Java开发环境的安装与设置,通过下载Eclipse IDE for Java Developers初步搭建好了Java开发环境,之后利用视频了解了Java程序的类型及 ...
- FMDB的一些基本操作小结
http://blog.csdn.net/iunion/article/details/7204625 仅供自己记录使用, h文件 #import <Foundation/Foundation. ...
- Spring Boot 初步小结
Spring Boot 是一种开发模式,不涉及任何新的技术 1.了解自动配置的原理 2.常用application.yml文件的配置项 3.Spring Boot 及 第三方提供的各种 starter ...
- 初步认识Node 之Node为何物
很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了. Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...
- ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步
一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...
- NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索
一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- Lasso回归算法: 坐标轴下降法与最小角回归法小结
前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...
随机推荐
- Unity Editor Console Pro 扩展点击定位到外部工程
链接 http://blog.csdn.net/akof1314/article/details/53232981 http://forum.china.unity3d.com/thread-2689 ...
- matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
找到了2个函数:unique和ismember 1. 去掉其中的重复行:unique 例子: IDX = [,,; ,,; ,,; ,,; ,,; ,,]; classNo = unique(IDX, ...
- 腾讯毛华:智能交互,AI助力下的新生态
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲人:毛华 腾讯云语音云总经理 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广 ...
- 【linux相识相知】网络属性配置
当我们拥有一个崭新的计算机的时候,第一步恐怕都是迫不及待的下载各种软件,看视频,听音乐等,这里的关键的一点是要有网络.现在的个人计算机大部分都是windows操作系统的,接入网络网络很简单,插上网线也 ...
- [转]ASP.NET MVC 5 List Editor with Bootstrap Modals
本文转自:https://www.codeproject.com/articles/786085/asp-net-mvc-list-editor-with-bootstrap-modals With ...
- goto语句和标签
goto 语句用于将执行流更改到标签处,虽然t-sql和pl/sql都提供了该语句,但是作为编程而言,我们不推荐使用此编程技术.要编写一个标签,应当在标识符后面加一个冒号.列如,下面示例使用goto语 ...
- 01.使用File类读写文件
使用File类去读数据: 方法一:使用ReadAllBytes(); 方法 namespace _01.使用File类读写数据01 { class Program { static void Main ...
- Hadoop2.x伪分模式部署
hadoop伪分布模式,只有一个节点,通常用来做测试. 一.环境准备 Linux网络配置已完成,可参见CentOS7网络配置: yum源成功挂载,可参见CentOS7本地yum源挂载: Linux已安 ...
- iDempiere 使用指南 库存出入库研究
Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...
- oracle查询所有用户表的表名、主键名称、索引、外键等
1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.ind ...