【发布时间】:2014-11-11 07:01:52
【问题描述】:
我正在尝试从单表 sqlite 数据库中检索数据,但 (sqlite3_step(statement) == SQLITE_ROW) 始终返回 false。我已经手动检查了数据库中的值并且它们存在。完整代码如下:
-(NSArray *)findByPartNumber:(NSString *)partNumber
{
const char *dbpath = [databasePath UTF8String];
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
if(sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:@"SELECT Description, ListPrice FROM PriceList WHERE PartNumber=?"];
const char *query_stmt = [querySQL UTF8String];
if(sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
sqlite3_bind_text(statement, 1, [partNumber UTF8String], -1, SQLITE_STATIC);
if(sqlite3_step(statement) == SQLITE_ROW)
{
NSString *description;
NSString *listPrice;
const char *tmp1 = (const char *)sqlite3_column_text(statement, 0);
const char *tmp2 = (const char *)sqlite3_column_text(statement, 1);
if(tmp1 == NULL)
description = nil;
else
{
description = [[NSString alloc] initWithUTF8String:tmp1];
[resultArray addObject:description];
}
if(tmp2 == NULL)
listPrice = nil;
else
{
listPrice = [[NSString alloc] initWithUTF8String:tmp2];
[resultArray addObject:listPrice];
}
sqlite3_finalize(statement);
}
}
sqlite3_close(database);
}
if([resultArray count] == 0)
return nil;
else
return resultArray;
}
代码进入 sqlite3_prepare_v2 块,但跳过 sqlite3_step 块。我错过了什么吗?
【问题讨论】: