Swift - 第三方SQLite库FMDB使用详解1(安装配置、工具类封装)
作者:hangge | 2019-04-02 08:10
一、基本介绍
1,什么是 FMDB?
- FMDB 是 iOS 平台的 SQLite 数据库框架。
- FMDB 以 OC 的方式封装了 SQLite 的 C 语言的 API。
2,FMDB 的优点
- FMDB 对比苹果自带的 Core Data 框架,更加轻量级和灵活。使用起来更加面向对象,省去了很多麻烦、冗余的 C 语言代码。
- FMDB 还提供了多线程安全的数据库操作方法,能有效地防止数据混乱。
3,FMDB 三个主要的类
(1)FMDatabase:一个 FMDatabase 表示一个 sqlite 数据库,所有对数据库的操作都是通过这个类(线程不安全)。它有如下几个方法:
- executeStatements:执行多条 sql。
- executeQuery:执行查询语句。
- executeUpdate:执行除查询以外的语句,如 create、drop、insert、delete、update。
(2)FMDatabaseQueue:内部封装 FMDatabase 和串行 queue,用于多线程操作数据库,并且提供事务(线程安全)。
- inDatabase: 参数是一个闭包,在闭包里面可以获得 FMDatabase 对象。
- inTransaction: 使用事务。
(3)FMResultSet:查询的结果集。可以通过字段名称获取字段值。
二、安装配置
(1)从 GitHub 上下载最新的代码:https://github.com/ccgus/fmdb
(2)将下载下来的源码包中 src文件夹下 fmdb 文件夹的拖拽至你的工程中。注意:fmdb 文件夹中的 info.plist 要删除掉。

(3)由于 FMDB 是使用 OC 写的,所以我们还需要创建一个桥接头文件 bridge.h,并在项目中配置。

(4)桥接头文件 bridge.h 内容如下:
#import "FMDB.h"

三、工具类的封装和使用
1,封装 FMDB 工具类
为方便使用,我们首先创建一个数据库类(SQLiteManager)
import Foundation
// 数据库管理类
class SQLiteManager: NSObject {
// 创建单例
private static let manger: SQLiteManager = SQLiteManager()
class func shareManger() -> SQLiteManager {
return manger
}
// 数据库名称
private let dbName = "test.db"
// 数据库地址
lazy var dbURL: URL = {
// 根据传入的数据库名称拼接数据库的路径
let fileURL = try! FileManager.default
.url(for: .applicationSupportDirectory, in: .userDomainMask,
appropriateFor: nil, create: true)
.appendingPathComponent(dbName)
print("数据库地址:", fileURL)
return fileURL
}()
// FMDatabase对象(用于对数据库进行操作)
lazy var db: FMDatabase = {
let database = FMDatabase(url: dbURL)
return database
}()
// FMDatabaseQueue对象(用于多线程事务处理)
lazy var dbQueue: FMDatabaseQueue? = {
// 根据路径返回数据库
let databaseQueue = FMDatabaseQueue(url: dbURL)
return databaseQueue
}()
}
2,FMDB 工具类测试
(1)下面我们使用 SQLiteManager 工具类,通过 open 方法打开数据库。注意 open 方法有如下特点:
- 如果指定路径对应的数据库文件已经存在, 就会直接打开。
- 如果不存在的话, 则会自动创建一个新的数据库文件。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let db = SQLiteManager.shareManger().db
if db.open() {
print("数据库打开成功!")
} else {
print("数据库打开失败: \(db.lastErrorMessage())")
}
db.close()
}
}
(2)运行结果如下:

(3)打开指定的沙盒目录,可以看到数据库文件确实也自动创建成功了。
全部评论(0)