勇芳软件工作室.汉化:  SQLite3 API Functions > Statements >

sqlite3_finalize

Previous pageReturn to chapter overviewNext page

描述

 

删除一个准备好的语句。

 

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;

}