您需要完成失败的准备好的语句吗?

Joh*_*ery 3 sqlite

使用时sqlite3_prepare_v2,是每条路径都需要调用sqlite3_finalize,还是只在成功时调用?例如,这是我在 Swift 方法中使用的代码:

let prepare = sqlite3_prepare_v2(db!, SQLString, -1, &delete, nil)
if (prepare == SQLITE_OK){
    if !(sqlite3_step(delete) == SQLITE_DONE){
        sqlite3_finalize(delete) // *
        sqlite3_close(db)
        return
    }
} else {
    // **
    sqlite3_close(db)
    return
}
sqlite3_finalize(delete)
sqlite3_close(db)

// rest of method continues if it didn't fail
Run Code Online (Sandbox Code Playgroud)

* 我假设我需要在这里调用它,因为即使没有成功运行该语句也已成功准备

** 但我需要在这里调用它吗?

csh*_*shu 5

sqlite3_finalize如果失败,无需致电sqlite3_prepare_v2

这里

*ppStmt 指向可使用 sqlite3_step() 执行的已编译准备语句。如果出现错误,*ppStmt 将设置为 NULL

不过,使用 NULL调用sqlite3_finalize并没有什么坏处。

这里

对 NULL 指针调用 sqlite3_finalize() 是无害的无操作。