通常查询到的结果需要在控件上进行展示
每一条数据一般都是一个字典数据
多条数据就需要一个数组
所以将查询到的结果(一个集合)遍历转为字典数据,再转为数组进行返回
SQLManager.swift为一个封装的数据库管理工具类
- SQLManager.swift:
import UIKit
// 数据库名称
private let dbName = "dataSources.db"
class SQLManager {
// 全局访问点
static let sharedTools: SQLManager = SQLManager()
// 队列方式
let queue: FMDatabaseQueue
// 构造函数
private init(){
// 打开数据库
// 获取路径
let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent(dbName)
// 队列方式
queue = FMDatabaseQueue(path: path)
// 创建表
createTable()
}
// MARK: - 创建表
private func createTable() -> Void {
// 获取文件
let file = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)!
// 准备sql
let sql = try! String(contentsOfFile: file)
// 执行sql
queue.inDatabase { (db) in
let result = db.executeStatements(sql)
if result {
print("创建表成功")
} else {
print("创建表失败")
}
}
}
// MARK: - 查询数据库,并将数据以数组的形式返回:
func execRecord(sql: String) -> [[String: AnyObject]] {
// 创建可变数组
var array: [[String: AnyObject]] = [[String: AnyObject]]()
// 执行sql
SQLManager.sharedTools.queue.inDatabase { (db) in
let resultSet = db.executeQuery(sql, withArgumentsInArray: nil)
// 创建一个可变字典
var dict: [String: AnyObject] = [String: AnyObject]()
// 遍历结果
while resultSet.next() {
// for in 循环
for i in 0..<resultSet.columnCount() {
// 根据列的索引取出键:类似于key
let key = resultSet.columnNameForIndex(i)
// 根据列的索引取出值:类似于value
let value = resultSet.objectForColumnIndex(i)
// 赋值
dict[key] = value
}
// 添加到可变数组
array.append(dict)
}
}
return array
}
}
- 外界使用:
// 准备sql
let sql = "SELECT * FROM T_Person"
let arr:[[String: AnyObject]] = SQLManager.sharedTools.execRecord(sql)
print(arr)
select.png