0

NULL以下の5番目のパラメータを入力する理由を教えてください。

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

前もって感謝します。

4

2 に答える 2

4

ステートメントが 1 つしかない限りsql、5 番目のパラメーターを使用する必要はありません。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 に答える