FMDB:一个更友好操作 SQLite 的 Objective-C 封装库

 , 

简介

FMDB 是SQLite的Objective-C封装库.

快速入门

安装

通过 CocoaPods 安装

使用

FMDB 中,有三个主要的类:

  1. FMDatabase – 代表一个SQLite数据库,用来执行SQL语句.
  2. FMResultSet – 代表FMDatabase 的一个SQL查询的结果.
  3. FMDatabaseQueue – 如果你想在多个线程上执行数据库查询和更新的操作, 这个类会很有用.下面的”线程安全”部分,会重点介绍它.

创建数据库

可以通过指定SQLite数据库文件的路径,来创建 一个 FMDatabase .路径可以是以下三种方式中的任一种:

  1. 一个完整文件路径.如果文件不存在,会自动创建.
  2. 一个空字符串(@"").会自动在缓存区域创建一个空的数据库.FMDatabase连接关闭时,此数据库会被删除.
  3. NULL. 创建一个内存数据库.FMDatabase连接关闭时,此数据库会被删除.

打开数据库

只有”打开”的数据库,才能执行各种操作.如果数据库不存在或者权限不够等原因,可能会引起打开失败.

更新数据库

SELECT以外的SQL操作,都被视为更新操作.包括: CREATEUPDATE,INSERTALTERCOMMITBEGINDETACHDELETEDROPENDEXPLAINVACUUM和 REPLACE语句等. 只要你的语句没有以SELECT开头,那它就是一个更新语句.

执行更新操作,会返回一个布尔值.YES,表示数据库更新操作成功;NO,表示更新数据库时发生了错误.你可以通过调用-lastErrorMessage和 -lastErrorCode方法来获取关于数据库错误的具体细节.

查询数据库

可以通过一个-executeQuery...方法执行SELECT语句,来执行数据库查询操作.

查询数据库,成功返回 FMResultSet 对象,失败返回 nil. 你可以通过调用-lastErrorMessage和 -lastErrorCode方法来获取关于查询失败的具体原因.

为了遍历查询结果,你需要一个 while()语句:

FMResultSet 有许多格式化获取值的方法:

  • intForColumn:
  • longForColumn:
  • longLongIntForColumn:
  • boolForColumn:
  • doubleForColumn:
  • stringForColumn:
  • dateForColumn:
  • dataForColumn:
  • dataNoCopyForColumn:
  • UTF8StringForColumnName:
  • objectForColumnName:

你可以根据列的下标来获取某条记录中某列的值:

  • intForColumnIndex:
  • longForColumnIndex:
  • longLongIntForColumnIndex:
  • boolForColumnIndex:
  • doubleForColumnIndex:
  • stringForColumnIndex:
  • dateForColumnIndex:
  • dataForColumnIndex:
  • dataNoCopyForColumnIndex:
  • UTF8StringForColumnNameIndex:
  • objectForColumnNameIndex:

关闭数据库

当你完成了数据库的查询和更新,你应该-close 关闭 FMDatabase连接,以释放资源.

事务操作

FMDatabase 通过 begin/end 事务语句,来完成事务相关的操作

批量操作

你可以施工用 FMDatabase的 executeStatements:withResultBlock: 来执行批量操作:

数据净化

对于一个准备用于FMDB的SQL语句,你不需要自己在插入前执行任何数据净化的操作.而是应该使用标准SQLite的绑定语法:

SQLite会将 ? 符合识别为一个将要插入的值的占位符.FMDB相关的操作,都支持可变参数,并且会适当转义.

另外,你可以使用命名参数语法:

因此,你 不应该 像下面这样去操作:

而是应该这样:

所有提供给-executeUpdate:方法的参数,都应该是 object-c 对象.下面的代码是无效的,并且会引起崩溃:

插入数字,应该使用 NSNumber 对象:

另外,你也可以使用 -execute*WithFormat:来使用NSString 风格的替换语法:

-execute*WithFormat: 方法内部将参数转换为合适的类型.仅支持一下占位符: %@%c%s%d%D%i%u%U%hi%hu%qi%qu%f%g%ld%lu%lld和 %llu. 使用不支持的占位符,将有可能引起崩溃或未定义的行为.如果你需要在SQL语句中使用 %,请使用 %%替代.

FMDatabaseQueue与线程安全

不要在多个线程间共用同一个FMDatabase对象

而是,应该使用FMDatabaseQueue.用法如下:

创建FMDatabaseQueue

使用FMDatabaseQueue

处理事务型操作

创建基于block的自定义 SQlite函数.

你可以使用”makeFunctionNamed:”来实现,下面是 main.m中的一个示例:

开源地址:https://github.com/ccgus/fmdb

1 1 收藏

资源整理者简介:yilufeng0

简介还没来得及写 :) 个人主页 · 贡献了28个资源 · 1


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1440 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer