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 ...
随机推荐
- keycode(来自互联网)
- Python学习笔记3(数据结构)
1.元组结构(Tuple) 元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串.数字甚至元组.元组创建后不能修改. 元组通常代表一行数据,而元组中的元素代表不同的数据项. 1.1元组的创建 ...
- QT TCP/IP
QT 网络通信(TCP/IP) 服务端: 一.监听新的客户端接入(QTcpServer) 重写函数 incomingConnection(qintptr socketDescriptor) 二.服务端 ...
- PLSQL在cmd命令行中的基本用法
首先:set serveroutput on:设置打印 declareresult number;beginselect (sal*12)+nvl(comm,0) into result from e ...
- 【待整理】IOS开发之下载
一.传统的下载文件的方式 - (void)downloaderWithUrl:(NSURL *)url { NSURLRequest *request = [NSURLRequest requestW ...
- HTML实体符号
http://www.php100.com/html/program/html/2013/0903/1052.html
- BZOJ 1062 糖果雨
http://www.lydsy.com/JudgeOnline/problem.php?id=1062 思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二 ...
- ubuntu下编译源码级QT
注意必须好好看官方文档: http://qt-project.org/doc/qt-5/linux.html 包括编译Qt库依赖的包等等. 编译过程中发现以下错误: All the OpenGL fu ...
- mvc和三层架构到底有什么区别
原文地址:http://zhidao.baidu.com/question/82001542.html?qbl=relate_question_3&word=MVC%20%CA%FD%BE%D ...
- php php打乱数组二维数组、多维数组
php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 <?php function shuffle_assoc($list) { if (!is ...