一、简介

1.什么是FMDB

  FMDB是iOS平台的SQLite数据库框架

  FMDB以OC的方式封装了SQLite的C语言API

  2.FMDB的优点

  使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码

  对比苹果自带的Core Data框架,更加轻量级和灵活

  提供了多线程安全的数据库操作方法,有效地防止数据混乱

  

  3.FMDB的github地址

  https://github.com/ccgus/fmdb

 二、核心类

  FMDB主要的三个类:

  (1)FMDatabase

    一个FMDatabase对象就代表一个单独的SQLite数据库

    用来执行SQL语句

  (2)FMResultSet

    使用FMDatabase执行查询后的结果集

  (3)FMDatabaseQueue

    用于在多线程中执行多个查询或更新,它是线程安全的

三、打开数据库

通过指定SQLite数据库文件路径来创建FMDatabase对象

FMDatabase *db = [FMDatabase databaseWithPath:path];

if (![db open]) {

NSLog(@"数据库打开失败!");

}

文件路径有三种情况

(1)具体文件路径

  如果不存在会自动创建

(2)空字符串@""

  会在临时目录创建一个空的数据库

  当FMDatabase连接关闭时,数据库文件也被删除

(3)nil

  会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁

四、执行更新

在FMDB中,除查询以外的所有操作,都称为“更新”

create、drop、insert、update、delete等

使用executeUpdate:方法执行更新

- (BOOL)executeUpdate:(NSString*)sql, ...

- (BOOL)executeUpdateWithFormat:(NSString*)format, ...

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

示例

[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

五、执行查询

查询方法

- (FMResultSet *)executeQuery:(NSString*)sql, ...

- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...

- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

示例

// 查询数据

FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];

// 遍历结果集

while ([rs next]) {

NSString *name = [rs stringForColumn:@"name"];

int age = [rs intForColumn:@"age"];

double score = [rs doubleForColumn:@"score"];

}

iOS 数据持久化-- FMDB的更多相关文章

  1. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  2. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  3. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  4. iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  5. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  6. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  7. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  8. 转载 -- iOS数据持久化存储

    作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方 ...

  9. iOS: 数据持久化方案

    数据持久化方案(如果总结不到位,或者有误的地方,敬请斧正) 一.功能: 主要是将数据持久化到本地,减少对网络请求的次数,既节省了用户的流量,也增强了App的体验效果. 二.种类:  plist存储:使 ...

随机推荐

  1. sqlserver的substring详细用法

    SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的‘abd’给提取出来,则可用substring 来实现: select sub ...

  2. JPA错误

    2016-11-141.2016-10-31: hibernate用注解 一对多 报Could not determine type for错误 原因:  接下来继续解决第二个问题:怎么又与集合打交道 ...

  3. hdu-1041(大数模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1041 题意:电脑中存在数字1,进行扩展操作,如果遇到1变为“01”,如果遇到0,变为“10”,经过一次 ...

  4. 菜品识别 SDK调用

    from aip import AipImageClassify import os """ 填入参数 """ APP_ID = 'your ...

  5. error C4430: error 2141

    c:\evan\workspace\1\1\netwowkippack.h(50) : error C2146: 语法错误 : 缺少“;”(在标识符“nSourPort”的前面) c:\evan\wo ...

  6. spring mvc 文件上传工具类

    虽然文件上传在框架中,已经不是什么困难的事情了,但自己还是开发了一个文件上传工具类,是基于springmvc文件上传的. 工具类只需要传入需要的两个参数,就可以上传到任何想要上传的路径: 参数1:Ht ...

  7. c++中指针的指针和指针的引用的使用

    当指针作为函数的参数进行传递时,实际上本质上是安置传递,即将指针进行了一份拷贝,在函数的内部对这个指针的修改实际上就是对一个在函数内部的那个局部变量的修改.这点事和引用不同的,引用实际上是在参数传递时 ...

  8. ueditor+word粘贴上传

    公司做的项目要用到文本上传功能. 网上找了很久,大部分都有一些不成熟的问题,终于让我找到了一个成熟的项目. 下面就来看看: 1.打开工程: 对于文档的上传我们需要知道这个项目是否符合我们的初衷. 运行 ...

  9. Servlet Life Cycle

    Servlet Life Cycle http://docs.oracle.com/javaee/5/tutorial/doc/bnafi.html Servlet Filters and Event ...

  10. Cron连接正常工作5次后异常原因分析

    目录 目录 1 问题描述 1 分析定位 1 解决方法 2 附1:Cron工作流 3 附2:SIGPIPE发生的位置 3 如果一个shell命令的"$?"值为141,则它是收到了SI ...