2015-05-12 96 views
4

使用Swift + FMDB打開和關閉sqlite數據庫連接的建議方法是什麼?使用Swift + FMDB打開和關閉數據庫

我下面這個tutorial這表明你應該打開和關閉數據庫,如:

let db = FMDatabase(path: databasePath as String) 
if db.open() { 
    //do stuff 
    db.close() 

關閉數據庫以外finally塊的將是其他語言紅旗我用過。我知道swift/iOS異常處理是不同於大多數語言和開發環境的。但是我仍然擔心這仍然是關閉數據庫連接的一種非常不安全的方式。

這種關閉db實際上安全的方法&推薦?
我應該使用類似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

你有沒有想過這個?我也有同樣的問題。 – thumbtackthief

+0

不,我仍然這樣做,如果db.open(){/ *做的東西*/db.close()} –

回答

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在另一個快速的LocationInfo.swift文件中分開保存,例如:

import UIKit 

// Locations Class 
class LocationRecord: NSObject { 

var locationSelected : Int32   = Int32() 
var locationRecordNo : Int32   = Int32() 
var locationName: String    = String() 

}

+0

我不明白這是如何涉及到我的問題。如果任何一個創建,添加,更新等功能出現錯誤,數據庫連接仍然不會關閉。 –

+0

也許我誤解了你。你必須得到正確的是sharedInstance.database!.open(),sharedInstance.database!.close()才能正常工作。即使指令失敗,表格也被正確關閉。這個例子在「if isCreated {...」中顯示的是什麼,如果失敗,你會得到一個成功/錯誤消息。這樣你就可以專注於代碼,直到你有正確的方式。正如我所說如果我錯過了這一點,道歉和忽視。最好。 –

相關問題