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

请检查这一行。我认为这是问题所在。

    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);

我在这里只报告代码的相关部分,添加准备语句等。

于 2012-12-03T13:09:51.453 回答
0

参数标记?在字符串中不起作用。

您必须将字符串'%'和参数的year结合起来;这可以在您的代码中完成(参见 Michele 的回答),也可以在 SQL 中完成,如下所示:

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