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 ...
随机推荐
- jquery的验证实例方法
上一篇介绍了js的正则验证法,这一片就用jquery来实例运行一下其中的几个方法 Js部分 <script> $(function(){ var ok1=false; var ok2=fa ...
- JS滚轮事件(mousewheel/DOMMouseScroll)了解
已经没有了小学生时代过目不忘的记忆力了,很多自己折腾的东西.接触的东西,短短1年之后就全然不记得了.比方说,完全记不得获取元素与页面距离的方法(getBoundingClientRect),或者是不记 ...
- Android 定义重名权限问题
一直以来对android的权限机制就有一个疑问,因为在使用权限时,实际上只需要permission的name这一个标签,而在定义权限时,android是不会检查是否重名的,那么在两个应用定义了重名权限 ...
- Git(Repo)常用命令收集
(注意: 只记录工作中实际使用的命令) 同步android源码 repo sync:(可加-c,只取当前分支: 可加-j4,线程数量) 查看android源码下所有项目的git状态 rep ...
- Android SQLite的使用2(非原创)
1.数据库的增.删.改.查:execSQL方法 public void insertAction() {//添加信息 db.execSQL("insert into Emp(name,sal ...
- Python3.5入门学习记录-File
在Python中,操作文件对象使用open函数来创建,下表列出了常用的操作file的函数: 序号 方法及描述 1.file.close() 关闭文件.关闭后文件不能再进行读写操作. 2.file.fl ...
- UVA 10253 Series-Parallel Networks (树形dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Series-Parallel Networks Input: standard ...
- java实现web文件无刷新上传
最近在做如何实现文件上传的相关工作,查阅了很多资料,发现网上写的都不是很直观,且调试复杂,经实验成功. 把form的target设为页面里一个看不见的iframe,这样上传时候就不会刷新页面了,比如 ...
- 利用Azure Automation实现云端自动化运维(1)
Azure Automation是Azure上的一个自动化工作流引擎,基于Powershell,来帮助用户简化,集成和自动化Azure上的运维工作,例如: 实现定时开关虚拟机,节约成本 实现定时创建删 ...
- 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)
游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...