1

stringWithFormat を使用せずにこのクエリを作成するにはどうすればよいですか。パラメータを SQLite クエリに渡すにはどうすればよいですか。今私のコードはこれです:

NSString *querySQL = [NSString stringWithFormat:@"SELECT name, char_code, sound, status  From Tmy_table Where ID=\"%d\"", i];

前もって感謝します

4

2 に答える 2

1

変数をそれらにバインドするには、sqlite3ホストパラメーターとsqlite3_bind()を使用する必要があります。これはあなたの例でこのようなものを望みます。

NSString* query = @"SELECT name, char_code, sound, status  From Tmy_table Where ID=?";
sqlite3_stmt* myStatement = NULL;
sqlite3_prepare_v2(myDBConnection, [query UTF8String], -1, &myStatement, NULL);
sqlite3_bind_int(myStatement, 1, i);

注意点:

  • 2つのsqlite3関数は、チェックする必要のあるエラーコードを返します。わかりやすくするために省略しました。
  • sqlite3_bind_int()の2番目のパラメーターは、3番目のパラメーターで置き換える疑問符を示します。インデックスは0ではなく1から始まります。

バインディングに関するドキュメントも参照してください。

于 2012-08-10T12:07:09.993 に答える
1
NSString sql = @"SELECT name, char_code, sound, status  From Tmy_table Where ID=?";
sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, SQLITE_STATIC) == SQLITE_OK)
{
    // If 'i' was text:
    // if (sqlite3_bind_text(stmt, 1, i, -1, SQLITE_STATIC) == SQLITE_OK)
    if (sqlite3_bind_int(stmt, 1, i) == SQLITE_OK) // Note: 1-based column when binding!!!!
    {
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            const char *name = sqlite3_column_text(stmt, 0); // Note: 0-based column when fetching!!!
            const char *sound = sqlite3_column_text(stmt, 1);
            const char *status = sqlite3_column_text(stmt, 2);
            // ... print the values or whatever
        }
    }
    else
    {
        NSLog(@"Failed to bind int: %s", sqlite3_errmsg(database));
    }
    sqlite3_finalize(stmt);
}
else
{
    NSLog(@"Failed to prepare statement '%@': %s", sql, sqlite3_errmsg(database));
}

編集バインドをテキストのようにsqlite3_bind_text()変更しました...i

于 2012-08-10T12:00:48.640 に答える