好吧,我的查询有问题,我不知道为什么!请帮忙
我尝试从名为moneda的表中选择一个ID,并给出类似参数的名称,
这是我查询的方法:
-(int)ConsultaIdMoneda:(NSString*) nombreMonedaParametro
{
int idMonedaObtenido;
NSLog(@" entre a consultar id de la moneda desde el app delegate");
sqlite3 *database;
const char *path = [[[NSBundle mainBundle] pathForResource:@"database2" ofType:@"sqlite"] UTF8String];
if(sqlite3_open(path, &database) == SQLITE_OK)
{
const char *sqlStatement =[[NSString stringWithFormat:@"Select idMoneda from moneda Where nombre = %@",nombreMonedaParametro] cStringUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%s",sqlStatement);
sqlite3_stmt *compiledStatement;
NSInteger result = sqlite3_prepare_v2(database,sqlStatement, -1, &compiledStatement, NULL);
NSLog(@"%s",sqlStatement);
if(result == SQLITE_OK)
{
idMonedaObtenido = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)] intValue];
}
else
{
NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(database));
}
sqlite3_reset(compiledStatement);
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
return idMonedaObtenido;
}
这是错误:
2009-12-03 00:28:45.715 BCDTravel[1220:20b] *** Assertion failure in -[BCDTravelAppDelegate ConsultaIdMoneda:], /Users/Mely/Desktop/BCDTravel version 45/Bcd/Classes/BCDTravelAppDelegate.m:101
2009-12-03 00:28:45.717 BCDTravel[1220:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error haciendo el select. 'no such column: euros''
我认为问题出在这条线,但我不知道该如何提出建议!
const char *sqlStatement =[[NSString stringWithFormat:@"Select idMoneda from moneda Where nombre = %@",nombreMonedaParametro] cStringUsingEncoding:NSUTF8StringEncoding];
最佳答案
因为您要传递字符值,所以需要在SQL中的参数周围加上引号。
例如:
SELECT idMoneda
FROM moneda
WHERE nombre = '%@'
否则,在编译SQL时,您传入的值本身将被视为列名(euros),而不是
nombre
列的候选值。建议您考虑使用准备好的语句,而不要“手动”组装字符串。
请参见this related SO question。
关于objective-c - 查询选择Sqlite Objective C iphone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1838146/