好吧,我的查询有问题,我不知道为什么!请帮忙
我尝试从名为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];
martin clayt.. 6
因为您传递的是字符值,所以需要在SQL中的参数周围加上引号.
例如:
SELECT idMoneda FROM moneda WHERE nombre = '%@'
否则,在编译SQL时,传入的值本身将被视为列名(欧元),而不是列的候选值nombre
.
建议你研究使用预准备语句而不是组装字符串'手动'.看到这个相关的SO问题.
因为您传递的是字符值,所以需要在SQL中的参数周围加上引号.
例如:
SELECT idMoneda FROM moneda WHERE nombre = '%@'
否则,在编译SQL时,传入的值本身将被视为列名(欧元),而不是列的候选值nombre
.
建议你研究使用预准备语句而不是组装字符串'手动'.看到这个相关的SO问题.