您是否需要最终确定失败的准备好的声明?

时间:2017-03-06 22:07:21

标签: sqlite

使用sqlite3_prepare_v2时,是否需要在每条路径中调用sqlite3_finalize,或仅在成功时调用?{1}}?例如,这是我在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

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

**但是我需要在这里打电话吗?

1 个答案:

答案 0 :(得分:4)

如果sqlite3_finalize失败,则无需致电sqlite3_prepare_v2

请参阅here

  

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

使用NULL调用sqlite3_finalize不会造成任何伤害。

请参阅here

  

在NULL指针上调用sqlite3_finalize()是一种无害的无操作。