在线文档教程
Sqlite
C界面 | C Interface

Retrieving Statement SQL

Retrieving Statement SQL

const char *sqlite3_sql(sqlite3_stmt *pStmt char *sqlite3_expanded_sql(sqlite3_stmt *pStmt

如果P是由sqlite3_prepare_v2(),sqlite3_prepare_v3(),sqlite3_prepare16_v2()或sqlite3_prepare16_v3()创建的,则sqlite3_sql(P)接口将返回一个指向用于创建预备语句P的UTF-8 SQL文本副本的指针。sqlite3_expanded_sql(P)接口返回一个指向UTF-8字符串的指针,该字符串包含展开绑定参数的预备语句P的SQL文本。

例如,如果使用SQL文本“SELECT $ abc,:xyz”创建预准备语句,并且参数$ abc绑定到整数2345,并且参数:xyz未绑定,则sqlite3_sql()将返回原始字符串“SELECT $ abc,:xyz“,但sqlite3_expanded_sql()将返回”SELECT 2345,NULL“。

如果内存不足可用于保存结果,或者结果将超过由SQLITE_LIMIT_LENGTH确定的最大字符串长度,sqlite3_expanded_sql()接口将返回NULL。

SQLITE_TRACE_SIZE_LIMIT编译时选项限制了绑定参数展开的大小。SQLITE_OMIT_TRACE编译时选项会导致sqlite3_expanded_sql()始终返回NULL。

sqlite3_sql(P)返回的字符串由SQLite管理,并在准备好的语句完成时自动释放。另一方面,由sqlite3_expanded_sql(P)返回的字符串是从sqlite3_malloc()获得的,并且必须由应用程序通过将其传递给sqlite3_free()来释放。