請誰能告訴我爲什麼我們在第五個參數中寫下NULL
?爲什麼我們在sqlite3_prepare_v2()中使用NULL
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
在此先感謝。
請誰能告訴我爲什麼我們在第五個參數中寫下NULL
?爲什麼我們在sqlite3_prepare_v2()中使用NULL
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
在此先感謝。
只要您的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);
}
因爲您不關心SQL語句的未編譯部分。從the docs:
如果pzTail不是NULL,則* pzTail由指向過去ZSQL第一個SQL語句結束的第一個字節。這些例程僅編譯zSql中的第一條語句,因此* pzTail指向仍未編譯的內容。
如果你有一個包含許多SQL語句的字符串,這會很有用,但是如果你不這麼做,那只是一句蠢話。
非常感謝Ignacio Vazquez-Abrams – 2012-07-25 05:44:54
,如果你的意思是?「爲什麼代碼使用NULL,而不是零」這是因爲nil意味着用於不存在的對象指針,而NULL意味着用作指針的地址,它基本上是空的 - 呃,不會指向任何東西。這是一個很好的區別,但這就是爲什麼。
作爲一個例子,你將有一個零指針,仍然可以傳遞Objective-C消息給它。但是你不能對你有一個NULL地址的實體做同樣的事情。
什麼是命令? – 2012-07-25 05:43:04
對不起,這是&sql。固定 – mask8 2012-07-25 05:43:57
非常感謝@ mask8 – 2012-07-25 05:44:17