0

私は次のようにsqliteステートメントのコードを書きました:

if(sqlite3_open([[self filepath] UTF8String], &db) == SQLITE_OK)
{
    retrievestatement = nil;

    if(retrievestatement == nil) {

        const char *sql = "Select * from OrdersHeaderTable where orderPlaceDate like '%?'";

        if(sqlite3_prepare_v2(db, sql, -1, &retrievestatement, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(db));

    }
    sqlite3_bind_text(retrievestatement, 1, [year UTF8String], -1, SQLITE_TRANSIENT);

    while(sqlite3_step(retrievestatement) == SQLITE_ROW)
    {

        NSLog(@"value is %@",[NSString stringWithUTF8String:(const char*)sqlite3_column_text(retrievestatement, 0)]);

    }

    sqlite3_finalize(retrievestatement);
}

しかし、データを取得していません。提案してください。

4

3 に答える 3

0

パラメータマーカー?は文字列内では機能しません。

'%'文字列とパラメータのを組み合わせる必要があります。yearこれは、コード(Micheleの回答を参照)または次のようなSQLのいずれかで実行できます。

sql = "Select * from OrdersHeaderTable where orderPlaceDate like '%' || ?";
于 2012-12-03T14:17:50.897 に答える
0

この行を確認してください。これが問題だと思います。

    const char *sql = "Select * from OrdersHeaderTable where orderPlaceDate like '%?'";

上記の行を次のように変更します

    const char *sql = "Select * from OrdersHeaderTable where orderPlaceDate like '%hyd'";

つまり、? 検索文字列に印を付けます。

于 2012-12-03T10:28:25.583 に答える
0

このように動作するはずです:

const char *sql = "Select * from OrdersHeaderTable where orderPlaceDate like ?001";
......
sqlite3_bind_text(retrieveStatement, 1, [[NSString stringWithFormat:@"%@%%", year] UTF8String], -1, SQLITE_TRANSIENT);

ここでは、コードの関連部分のみを報告し、prepare ステートメントなどを追加します。

于 2012-12-03T13:09:51.453 に答える