0

そのため、現在、次のような単純な SQL クエリをコンパイルしています。

    const char *sqlQuery = "SELECT value FROM settings WHERE name=? LIMIT 1";

    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(database, sqlQuery, -1, &compiledStatement, nil) == SQLITE_OK)
    {
        sqlite3_bind_text(compiledStatement, 1, [name UTF8String], -1, SQLITE_TRANSIENT);

        while(sqlite3_step(compiledStatement) == SQLITE_ROW)
        {
            NSString *theValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];

            // ...
        }
    }

ただし、呼び出しているテーブル名を変更できるようにしたいと考えています。sqlQuery を次のように変更できると思いました。

const char *sqlQuery = "SELECT value FROM ? WHERE name=? LIMIT 1";

そして、名前の値をバインドする前にバインドしますが、これは機能しません。これは、選択引数に対してのみ機能するように設計されていると思います...

ここにテーブル名を挿入する方法があるかどうかは誰にもわかりませんか、それともプレーンテキストで行う必要がありますか?

4

2 に答える 2

1
NSString *queryString = [NSString stringWithFormat:@"SELECT value FROM %@ WHERE name=%@ LIMIT 1",tablename,attribute];

 const char *sqlQuery = [queryString UTF8String];

お役に立てれば..

于 2013-04-08T14:01:08.600 に答える
1
 NSString *sqlTemplate = @"SELECT value FROM %@ WHERE name=? LIMIT 1";

 //assuming you have your table name stored in tableName variable
const char *sqlQuery = [[NSString stringWithFormat:sqlTemplate, tableName] UTF8String];

sqlite3_stmt *compiledStatement;

if(sqlite3_prepare_v2(database, sqlQuery, -1, &compiledStatement, nil) == SQLITE_OK)
{
    sqlite3_bind_text(compiledStatement, 1, [name UTF8String], -1, SQLITE_TRANSIENT);

    while(sqlite3_step(compiledStatement) == SQLITE_ROW)
    {
        NSString *theValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];

        // ...
    }
}
于 2013-04-08T14:10:45.597 に答える