У меня есть метод, который генерирует словарь возвращаемых значений из базы данных:
- (NSDictionary *)getParametersForPreset:(NSUInteger)presetID plants:(NSArray *)plants
{
NSString *loggers = @"";
NSString *invertors = @"";
NSString *plantsList = @"";
const char *sql = "SELECT loggerID, invertorID FROM records WHERE presetID IN (?) AND plantID IN (?)";
BOOL isEmpty = YES;
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) != SQLITE_OK)
{
NSLog(@"Error: '%s'.", sqlite3_errmsg(database));
}
for (int i = 0; i < [plants count]; i++) {
if (i == 0)
{
plantsList = [NSString stringWithFormat:@"'%@'",[[plants objectAtIndex:0] valueForKey:@"id"]];
}
else
{
plantsList = [plantsList stringByAppendingFormat:@",'%@'",[[plants objectAtIndex:i] valueForKey:@"id"]];
}
}
NSLog(@"plants: %@", plantsList);
NSLog(@"preset: %d", presetID);
sqlite3_bind_int(statement, 1, presetID);
sqlite3_bind_text(statement, 2, [plantsList UTF8String], -1, SQLITE_TRANSIENT);
NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc] init] autorelease];
int i = 0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
if (i == 0)
{
loggers = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
invertors = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
isEmpty = NO;
i++;
}
else
{
loggers = [loggers stringByAppendingFormat:@",%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]];
invertors = [invertors stringByAppendingFormat:@",%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)]];
}
}
sqlite3_reset(statement);
if (isEmpty == YES)
{
return nil;
}
[dictionary setValue:[NSString stringWithString:[plantsList stringByReplacingOccurrencesOfString:@"'" withString:@""]] forKey:@"plants"];
[dictionary setValue:loggers forKey:@"loggers"];
[dictionary setValue:invertors forKey:@"invertors"];
return dictionary;
}
Этот запрос ничего не возвращает мне в коде, но затем я делаю тот же запрос в SQLite Manager в Firefox длята же база данных, она возвращает мне правильные данные.Пожалуйста, помогите мне найти мои ошибки, я действительно исчерпан этим.
Вот запрос, который я делаю в Менеджере:
SELECT loggerID, invertorID FROM records WHERE presetID=1 AND plantID IN ('3','2','1','6','5','4')
И здесь вошлизначения из кода:
preset: 1
plants: '3','2','1','6','5','4'
Большое спасибо!