我目前正在編寫一個sqlite
數據庫的代碼。我注意到在準備查詢之後,我總是需要在退出函數之前完成查詢(sqlite3_finalize(statementPointer)
)。有沒有辦法做到這一點,而不是填補所有可能性?在離開函數之前執行代碼
例如:
func updateColumn(db: COpaquePointer, name: String, x: sqlite3_int64, y: String!=nil) -> Bool {
var statement = "UPDATE MY_TABLE SET X=?"
var statementPointer: COpaquePointer = nil
if y != nil {
statement += ", Y=?"
}
statement += " WHERE NAME=?"
if sqlite3_prepare_v2(db, statement, -1, &statementPointer, nil) != SQLITE_OK {
return false
} else if sqlite3_bind_int64(statementPointer, 1, x) != SQLITE_OK {
// Note this code here
sqlite3_finalize(statementPointer)
return false
}
if y != nil {
if sqlite3_bind_text(statementPointer, 2, y, -1, nil) != SQLITE_OK {
// Note this repetition
sqlite3_finalize(statementPointer)
return false
}
}
if sqlite3_step(statementPointer) != SQLITE_DONE {
// Note this repetition
sqlite3_finalize(statementPointer)
return false
}
// Note this repetition
sqlite3_finalize(statementPointer)
return true
}
當然,這只是我走過來說明這一點。在真實的代碼中,還有很多其他的if
條款,我需要最終確定他們的陳述。
據我所知,這是類似於deinit
類的swift,但有deinit
s的功能呢?
例如(代碼,我想它是這樣,但不工作):
func updateColumn(params...) -> Bool {
// code...
deinit {
sqlite3_finalize(statementPointer)
}
}