描述
删除一个准备好的语句。
C / C ++语法
int sqlite3_finalize(sqlite3_stmt *pStmt); |
PB语法
FUNCTION sqlite3_finalize ( _ BYVAL hStmt AS DWORD, _ ) AS LONG |
参数
pStmt
[in]准备好的语句句柄。
返回值
如果最近对该语句的评估没有遇到任何错误,或者如果语句从未被评估过,那么sqlite3_finalize返回SQLITE_OK。如果最近对语句S的评估失败,则sqlite3_finalize(S)返回相应的错误代码或扩展错误代码。
备注
可以在准备语句S的生命周期中的任何时间调用sqlite3_finalize(S)函数:在对sqlite3_reset进行一次或多次调用之后,或者在调用sqlite3_step之后再进行语句S的计算之前,无论该语句是否已完成执行。
在NULL指针上调用sqlite3_finalize是无害的操作。
应用程序必须完成每个准备好的语句,以避免资源泄漏。应用程序在最终确定之后尝试使用准备好的语句是一个严重的错误。准备好的语句在完成之后的任何使用都可能导致未定义和不良行为,例如segfaults和堆损坏。
C ++实现代码
SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){
int rc;
if( pStmt==0 ){
/* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
** pointer is a harmless no-op. */
rc = SQLITE_OK;
}else{
Vdbe *v = (Vdbe*)pStmt;
sqlite3 *db = v->db;
#if SQLITE_THREADSAFE
sqlite3_mutex *mutex;
#endif
if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
#if SQLITE_THREADSAFE
mutex = v->db->mutex;
#endif
sqlite3_mutex_enter(mutex);
rc = sqlite3VdbeFinalize(v);
rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(mutex);
}
return rc;
}