0

请谁能告诉我为什么我们NULL在下面的第五个参数中写?

if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)

提前致谢。

4

2 回答 2

4

只要你sql只有一个语句,你就不需要使用第五个参数。当sql有多个语句时,您可以收到指向下一个语句开头的指针。例如:

const char* sql =
  "DROP TABLE price_list;"
  "CREATE TABLE price_list ( item TEXT, price INTEGER)";
while ( *sql ) {
  sqlite3_stmt* statement;
  sqlite3_prepare_v2(db, sql, -1, &statement, &sql);
  sqlite_step(statement);
  sqlite_finalize(statement);
}
于 2012-07-25T05:41:11.210 回答
2

因为您不关心 SQL 语句的未编译部分。从文档

如果 pzTail 不为 NULL,则 *pzTail 指向 zSql 中第一个 SQL 语句末尾之后的第一个字节。这些例程只编译 zSql 中的第一条语句,因此 *pzTail 指向未编译的内容。

如果您有一个包含许多 SQL 语句的字符串,那么使用它会很有用,但如果您没有,那么它就很笨拙。

于 2012-07-25T05:39:01.580 回答