本片文章适用于需要给app增加查询等功能。
一.Command+N创建bundle文件,并将.db文件添加到bundle文件中。
二.新建.swift文件,创建SQLManager类对数据库进行操作
import Foundation
public class SQLManager : NSObject {
// 创建该类的静态实例变量
static let instance = SQLManager();
// 定义数据库变量
var db : OpaquePointer? = nil
// 对外提供创建单例对象的接口
class func shareInstance() -> SQLManager{
return instance
}
// 获取数据库文件的路径
func Open(fileName:String) ->Bool{
let documentPath = Bundle.main.path(forResource:"Db", ofType:"bundle")
let DBPath = (documentPath!asNSString).appendingPathComponent(fileName)
let cDBPath = DBPath.cString(using:String.Encoding.utf8)
if sqlite3_open(cDBPath, &db)==SQLITE_OK{
returntrue
}else{
returnfalse
}
}
// 查询数据库,传入SQL查询语句,返回一个字典数组
func queryDataBase(querySQL :String) -> [[String:AnyObject]]? {
// 创建一个语句对象
var statement :OpaquePointer? = nil
if querySQL.lengthOfBytes(using:String.Encoding.utf8)>0{
let cQuerySQL = (querySQL.cString(using:String.Encoding.utf8))!
// 进行查询前的准备工作
// 第一个参数:数据库对象,第二个参数:查询语句,第三个参数:查询语句的长度(如果是全部的话就写-1),第四个参数是:句柄(游标对象)
if sqlite3_prepare_v2(db, cQuerySQL,-1, &statement,nil)==SQLITE_OK{
var queryDataArr = [[String:AnyObject]]()
while sqlite3_step(statement)==SQLITE_ROW{
// 获取解析到的列
let columnCount = sqlite3_column_count(statement)
// 遍历某行数据
var temp = [String:AnyObject]()
for i in 0..<columnCount {
// 取出i位置列的字段名,作为temp的键key
let cKey =sqlite3_column_name(statement, i)
let key :String=String(validatingUTF8: cKey!)!
//取出i位置存储的值,作为字典的值value
let cValue =sqlite3_column_text(statement, i)
if let aaa = cValue{
let value = String(cString: aaa)
temp[key] = valueasAnyObject
}
}
queryDataArr.append(temp)
}
return queryDataArr
}
}
return nil
}
}
三.在其他类中使用SQLManager类中的方法实现对数据库文件的查询操作。