lookupAllForSQL 是一个数据库函数。 表名和标识符是动态的。
for (int i=0; i<FavIdent.count; i++)
{
NSString *strfavarry = [NSString stringWithFormat:@"SELECT Title FROM %@ WHERE identifire='%@'",[FavTablename objectAtIndex:i],[FavIdent objectAtIndex:i]];
FavTitle = [FavData lookupAllForSQL:strfavarry];
}
FavTitle应仅保留找到的最后一行,但我想要所有指示的列。
答案 0 :(得分:1)
lookupAllForSQL
正在返回一个数组,因此您在FavTitle
中存储的值(应该是favTitle
- 变量以常规小写字母开头)每次都被替换,导致循环退出后留下最后一个值。
您需要使用NSMutableArray
并在每次循环时附加子数组:
NSMutableArray *tempArray = [NSMutableArray new];
for (int i=0; i<FavIdent.count; i++)
{
NSString *strfavarry = [NSString stringWithFormat:@"SELECT Title FROM %@ WHERE identifire='%@'",[FavTablename objectAtIndex:i],[FavIdent objectAtIndex:i]];
[tempArray addObjectsFromArray:[FavData lookupAllForSQL:strfavarry]];
}
favTitle = [tempArray copy]; // Convert it back to an NSArray
您还应该使用准备好的SQL语句而不是字符串插值来防止SQL注入。
答案 1 :(得分:0)
在您当前的代码中,您 for循环将 [FavData lookupAllForSQL:strfavarry] 的结果数组分配 FavTitle 即可。因此,当执行for循环时, FavTitle 必须始终包含最后一个结果数组。
使用下面的代码
NSArray *result = [FavData lookupAllForSQL:strfavarry];
if(result){
[FavTitle addObject:[result objectAtIndex:0]];
}