使用like运算符的sqlite查询在xcode中不起作用

时间:2012-12-03 10:14:02

标签: xcode sqlite ios6

我为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);
}

但它没有得到数据。请建议我。

3 个答案:

答案 0 :(得分:0)

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

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

将以上行更改为

    const char *sql = "Select * from OrdersHeaderTable where orderPlaceDate like '%hyd'";
是的,改变了?标记到搜索字符串。

答案 1 :(得分:0)

它应该以这种方式工作:

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

我在这里仅报告代码的相关部分,添加准备声明等。

答案 2 :(得分:0)

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

您必须合并'%'参数的字符串year;这可以在你的代码中完成(参见Michele的答案),也可以在SQL中完成:

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