我为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);
}
但它没有得到数据。请建议我。
答案 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 '%' || ?";