SQLite C 接口
检索语句 SQL
const char *sqlite3_sql(sqlite3_stmt *pStmt); char *sqlite3_expanded_sql(sqlite3_stmt *pStmt); #ifdef SQLITE_ENABLE_NORMALIZE const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt); #endif
如果 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 文本。sqlite3_normalized_sql(P) 接口返回一个指向 UTF-8 字符串的指针,该字符串包含准备语句 P 的规范化 SQL 文本。用于规范化 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) 和 sqlite3_normalized_sql(P) 返回的字符串由 SQLite 管理,并在准备好的语句完成时自动释放。另一方面,sqlite3_expanded_sql(P) 返回的字符串是从sqlite3_malloc()获得的,应用程序必须通过将其传递给sqlite3_free()来释放它。
sqlite3_normalized_sql() 接口仅在定义了SQLITE_ENABLE_NORMALIZE编译时选项时可用。