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)