FMDB

FMDB概述

什么是FMDB

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

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

FMDB的优点

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

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

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

FMDB的github地址

* https://github.com/ccgus/fmdb

FMDB基本使用

FMDB有三个核心类

FMDatabase

* 一个FMDatabase对象就代表一个单独的SQLite数据库 用来执行SQL语句

FMResultSet

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

FMDatabaseQueue

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

FMDB打开数据库

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

FMDatabase *db = [FMDatabase databaseWithPath:path];

if (![db open]) {

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

}

文件路径(path)有三种情况:

* 具体文件路径

* 如果不存在会自动创建

* 空字符串@""

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

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

* 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"];

*  }

* 
FMDatabaseQueue

* FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题.

* 为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类

* FMDatabaseQueue的创建
  FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

*

* 简单使用
  [queue inDatabase:^(FMDatabase *db) {

*      [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];

*      [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];

*      [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];

*

*      FMResultSet *rs = [db executeQuery:@"select * from t_student"];

*      while ([rs next]) {

*          // …

*      }

*  }];

*

* 使用事务
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

*  [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];

*  [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];

*  [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];

*

*  FMResultSet *rs = [db executeQuery:@"select * from t_student"];

*  while ([rs next]) {

*      // …

*  }

* }];

*

* 事务回滚 
 rollback = YES;

FMDB的下载地址: https://github.com/ccgus/fmdb

iOS FMDB的更多相关文章

  1. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  2. IOS FMDB 获取数据库表和表中的数据

    ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...

  3. iOS FMDB 不需要关闭

    以前做了一个应用,里面用到了FMDB,进行每一次操作前,都open,完成操作后都close.因为我是参考他们以前的代码.程序初期没发现什么问题,程序完成后,各种卡顿就出现了!即使我是放在新线程里操作的 ...

  4. iOS FMDB的使用

    简介: SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需要加入 libsqlite ...

  5. iOS | FMDB快速上手

    任何的开发都或多或少的接触到数据库,而在IOS中一般使用的是SQLite数据库,这是一个轻量功能较为不错的数据库.而现在用到比较多的第三方数据库操作框架就是FMDB.废话不多说,相信查找到这篇文章的都 ...

  6. iOS FMDB小试了一下

    今天从早上9点,一直在看FMDB,知道中午11:40.我的效率是不是很低下.中间也碰到了几个小bug. 虽然做了一个小demo,但是觉得还比不上在项目中使用中锻炼的多,先暂且一总结. 先下载FMDB的 ...

  7. iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)

    由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此同时,把SQLite的文档页 http://www.sqlite.org/docs.html 加到你的书签中.自动 ...

  8. IOS FMDB模糊查询

    http://blog.sina.com.cn/s/blog_9630f1310101fx1d.html /查询记录 -(NSArray*)selectitemDream_desc:(JiemengS ...

  9. iOS FMDB的是使用和注意事项

    1.FMDB 默认的使用方法不是线程安全的. 2.Sqlite 默认不支持外键. 3.Sqlite 不支持用 ALTER 关键字给已有表添加外键约束 解决: 1.FMDBDatabaseQueue 2 ...

随机推荐

  1. Android 使用Facebook的 Stetho工具

    Stetho在Android Studio中用: 1, 引入 compile 'com.facebook.stetho:stetho:1.3.1' compile 'com.facebook.stet ...

  2. MFC让控件随窗口大小而改变

    转载自http://blog.csdn.net/chw1989/article/details/7488711 大小和位置都改变(亲测可行) 1.首先为窗体类添加CRect m_rect,该成员变量用 ...

  3. vs2010中的外部依赖项的含义

    vs2010中的项目下拉列表下面有外部依赖项,里面显示的文件是你程序中显示包含的头文件所包含的的头文件.比如,你的main函数里面包含了windows.h头文件,而windows.h头文件又包含其他头 ...

  4. jQuery源码学习:使用隐藏的new来创建对象

    在JQuery源码中发现,JQuery定义一个类,但不用new关键字去创建该类对象,而使用方法调用()方式去创建该对象. 很多时候我们是这样写类,然后使用new创建对象的: function Pers ...

  5. 几个makefile小例子

    http://www.blogjava.net/canvas/articles/quick_makefile.html http://www.cnblogs.com/azraelly/archive/ ...

  6. 基于cygwin构建u-boot(二)gcc的C语言标准版本号(-std=)

    接上文,修改Makefile和config.mk中,.depend相关文件格式后继续编译. 四.tools文件夹的文件编译错误 错误告警如下[多行信息,请使用右侧滚动条查看]: gcc -Wall - ...

  7. LaTeX使用titlesec宏包改变章节编号形式的方法

    1.titleformat宏包命令详解 LaTeX中可以用titlesec宏包中的titleformat命令来改变标题形式: 导入宏包: \usepackage{titlesec} 改变标题的代码如下 ...

  8. ASP.NET MVC 4.0 学习1-C#基础语法

    1,方法多載,相同的方法名稱,不同的參數類型.數量 class Program { static void Main(string[] args) { Program newObject = new ...

  9. tomcat j2ee 目录结构

    一.TOMCAT的目录结构 /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和w ...

  10. python list列表 方法总结

    深入链表(most on lists) The list data type has some more methods. Here are all of the methods of list ob ...