使用 Swift + FMDB 打开和关闭数据库
Posted
技术标签:
【中文标题】使用 Swift + FMDB 打开和关闭数据库【英文标题】:Open and close db with Swift + FMDB 【发布时间】:2015-07-23 17:38:01 【问题描述】:使用 Swift + FMDB 打开和关闭 sqlite db 连接的推荐方法是什么?
我正在关注这个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
【问题讨论】:
你有没有想过这个问题?我有同样的问题。 没有。如果 db.open() /*do stuff*/ db.close() 我仍然会这样做 【参考方案1】:这是我采取的方法,可能会给您带来洞察力。我在程序中有数据库调用,但表方法(创建、添加、更新)在一个类中,需要时会被多次调用。
所以要创建一个我调用的数据库,在这种情况下,当按下按钮时:
@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()
【讨论】:
我不明白这与我的问题有何关系。如果您的创建、添加、更新等函数中的任何一个出现错误,数据库连接仍然不会关闭。 也许我看错了你。您必须正确的是 sharedInstance.database!.open()、sharedInstance.database!.close() 才能正常工作。这样,即使指令失败,表也已正确关闭。此示例在“if isCreated ...”中显示的内容如果失败,您会收到成功/错误消息。这样你就可以专注于代码,直到你做对了。正如我所说,如果我错过了这一点,请道歉并忽略。最好的。以上是关于使用 Swift + FMDB 打开和关闭数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将 FMDB 与 cocoapods 和 swift 一起使用?
如何在 swift 3 中使用现有的 SQLite? (FMDB)