我目前正在编写一个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)
}
}