为什么我们在sqlite3_prepare_v2()中使用NULL

时间:2012-07-25 05:32:09

标签: iphone ios ios4 sqlite

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

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

提前致谢。

3 个答案:

答案 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地址的实体做同样的事情。

相关问题