iOS FMDB
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的更多相关文章
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
- IOS FMDB 获取数据库表和表中的数据
ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...
- iOS FMDB 不需要关闭
以前做了一个应用,里面用到了FMDB,进行每一次操作前,都open,完成操作后都close.因为我是参考他们以前的代码.程序初期没发现什么问题,程序完成后,各种卡顿就出现了!即使我是放在新线程里操作的 ...
- iOS FMDB的使用
简介: SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需要加入 libsqlite ...
- iOS | FMDB快速上手
任何的开发都或多或少的接触到数据库,而在IOS中一般使用的是SQLite数据库,这是一个轻量功能较为不错的数据库.而现在用到比较多的第三方数据库操作框架就是FMDB.废话不多说,相信查找到这篇文章的都 ...
- iOS FMDB小试了一下
今天从早上9点,一直在看FMDB,知道中午11:40.我的效率是不是很低下.中间也碰到了几个小bug. 虽然做了一个小demo,但是觉得还比不上在项目中使用中锻炼的多,先暂且一总结. 先下载FMDB的 ...
- iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)
由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此同时,把SQLite的文档页 http://www.sqlite.org/docs.html 加到你的书签中.自动 ...
- IOS FMDB模糊查询
http://blog.sina.com.cn/s/blog_9630f1310101fx1d.html /查询记录 -(NSArray*)selectitemDream_desc:(JiemengS ...
- iOS FMDB的是使用和注意事项
1.FMDB 默认的使用方法不是线程安全的. 2.Sqlite 默认不支持外键. 3.Sqlite 不支持用 ALTER 关键字给已有表添加外键约束 解决: 1.FMDBDatabaseQueue 2 ...
随机推荐
- Android 使用Facebook的 Stetho工具
Stetho在Android Studio中用: 1, 引入 compile 'com.facebook.stetho:stetho:1.3.1' compile 'com.facebook.stet ...
- MFC让控件随窗口大小而改变
转载自http://blog.csdn.net/chw1989/article/details/7488711 大小和位置都改变(亲测可行) 1.首先为窗体类添加CRect m_rect,该成员变量用 ...
- vs2010中的外部依赖项的含义
vs2010中的项目下拉列表下面有外部依赖项,里面显示的文件是你程序中显示包含的头文件所包含的的头文件.比如,你的main函数里面包含了windows.h头文件,而windows.h头文件又包含其他头 ...
- jQuery源码学习:使用隐藏的new来创建对象
在JQuery源码中发现,JQuery定义一个类,但不用new关键字去创建该类对象,而使用方法调用()方式去创建该对象. 很多时候我们是这样写类,然后使用new创建对象的: function Pers ...
- 几个makefile小例子
http://www.blogjava.net/canvas/articles/quick_makefile.html http://www.cnblogs.com/azraelly/archive/ ...
- 基于cygwin构建u-boot(二)gcc的C语言标准版本号(-std=)
接上文,修改Makefile和config.mk中,.depend相关文件格式后继续编译. 四.tools文件夹的文件编译错误 错误告警如下[多行信息,请使用右侧滚动条查看]: gcc -Wall - ...
- LaTeX使用titlesec宏包改变章节编号形式的方法
1.titleformat宏包命令详解 LaTeX中可以用titlesec宏包中的titleformat命令来改变标题形式: 导入宏包: \usepackage{titlesec} 改变标题的代码如下 ...
- ASP.NET MVC 4.0 学习1-C#基础语法
1,方法多載,相同的方法名稱,不同的參數類型.數量 class Program { static void Main(string[] args) { Program newObject = new ...
- tomcat j2ee 目录结构
一.TOMCAT的目录结构 /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和w ...
- python list列表 方法总结
深入链表(most on lists) The list data type has some more methods. Here are all of the methods of list ob ...