请有人告诉我为什么我们在下面的第五个参数中写NULL
?
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
提前致谢。
答案 0 :(得分: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);
}
答案 1 :(得分:2)
因为您不关心SQL语句的未编译部分。来自the docs:
如果pzTail不为NULL,则* pzTail指向zSql中第一个SQL语句结尾之后的第一个字节。这些例程只编译zSql中的第一个语句,因此* pzTail指向仍未编译的内容。
如果你有一个包含许多SQL语句的字符串,那么这很有用,但是如果你没有,那么它只是愚蠢的。
答案 2 :(得分:0)
如果你的意思是"为什么代码使用NULL而不是nil?"它是因为nil意味着用于不存在的对象指针,而NULL意味着用作指针的地址,基本上,好吧,NULL - 呃,什么都没有。它是一个很好的区别,但这就是原因。
作为一个例子,你会有一个nil指针,仍然可以传递objective-c消息。但你不能对你有NULL地址的实体做同样的事情。