使用Swift + FMDB打开和关闭sqlite数据库连接的推荐方法是什么?
我正在关注此tutorial,这表明您应该打开和关闭数据库,如:
let db = FMDatabase(path: databasePath as String)
if db.open() {
//do stuff
db.close()
在finally块之外关闭数据库将是我用过的其他语言的红旗。我知道swift / iOS异常处理与大多数语言和开发环境不同。但是我仍然担心这仍然是关闭数据库连接的一种非常不安全的方式。
这种关闭数据库的方法实际上是否安全&建议?
我应该使用类似SwiftTryCatchFinally的东西吗?
let db = FMDatabase(path: databasePath as String)
SwiftTryCatch.try({
connection = db.open()
if connection {
//do stuff
}
}, catch: {
}, finally: {
if connection {
db.close()
}
})
iOS异常处理对我来说太陌生了:P
答案 0 :(得分:0)
这是我采取的方法,可能会给你一个见解。我在程序中有数据库调用,但表方法(创建,添加,更新)在一个类中,在需要时被多次调用。
所以要创建一个我调用的数据库,在这种情况下按下按钮时:
@IBAction func buttonCreateTable(sender: AnyObject) {
var locationRecord: LocationRecord = LocationRecord()
var isCreated = DatabaseFunctions.instance.createLocationTable()
if isCreated {
NSLog("Locations Database Created")
} else {
NSLog("Locations Database Not Created")
}
}
类DatabaseFunctions.swift会读取...
import UIKit
let sharedInstance = DatabaseFunctions()
class DatabaseFunctions: NSObject {
var database: FMDatabase? = nil
class var instance: DatabaseFunctions {
sharedInstance.database = FMDatabase(path: Utilities.getPath("yourDatabase.sqlite"))
var path = Utilities.getPath("yourDatabase.sqlite")
return sharedInstance
}
// yourTableFunctions *************************
func createLocationTable() -> Bool {
sharedInstance.database!.open()
let sqlStatement = "CREATE TABLE IF NOT EXISTS MYTABLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP, TIMESTAMPLASTEDIT DATETIME DEFAULT CURRENT_TIMESTAMP, NAME TEXT, nil)"
let isCreated = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray:nil)
sharedInstance.database!.close()
return isCreated
}
}
LocationsRecord在另一个swift,LocationInfo.swift中保持独立,文件如:
import UIKit
// Locations Class
class LocationRecord: NSObject {
var locationSelected : Int32 = Int32()
var locationRecordNo : Int32 = Int32()
var locationName: String = String()
}