2011-08-10 42 views
1

我想从数据库中使用FMDB获取数据,但尝试过一段时间徒劳无功,我找不出为什么这会引发EXC_BAD_ACCESS异常。该参数是从NSInteger传入的,但我既不能记录也不能在SELECT语句中使用它。我的代码是:NSInteger和int给出例外

-(SQLiteResult*) getClient:(bool)forceRefresh id:(NSString*)id forYear:(NSInteger)year { 
    SQLiteResult *res; 
    if(!forceRefresh){ 
     NSMutableArray *hereditaments = [[NSMutableArray alloc] init]; 
     NSLog([NSString stringWithFormat:@"SELECT * FROM Clients WHERE ID = %@ AND Year = %@", id, [NSString stringWithFormat:@"%@", year]]); // exception 
     NSLog([NSString stringWithFormat:@"SELECT * FROM Clients WHERE ID = %@ AND Year = %@", id, year]]); // also exception 
     FMResultSet *rs = [db executeQuery:[NSString stringWithFormat: @"SELECT * FROM Clients WHERE ID = ? AND Year = %@", year], id]; // also exception 
     FMResultSet *rs = [db executeQuery:[NSString stringWithFormat: @"SELECT * FROM Clients WHERE ID = ? AND Year = ?", id, year]]; // also exception 

我就只是把它当作一个字符串,而不是边缘。有没有一种安全的方法可以在SQL语句中使用这一年?

回答

0

正如你一年变量是NSInteger的类型,你应该使用%d格式,而不是%@在你的NSString创作

+0

将其格式化为%d,而不是将其作为参数传递给查询。谢谢。 – Echilon

3

NSInteger不是一个对象类型。它只是一个typedef类型int。所以,你不能使用%@作为格式说明符。你应该使用%d