Запрос SQlite-FMDatabase, пока цикл не работает - PullRequest
0 голосов
/ 17 мая 2011

У меня есть таблица «ключевые слова», которая имеет 2 столбца «pk» и «текст».В Firefox SQLite Manager я вижу, что в столбце «текст» есть два имени: «Джон» и «Том».В моем коде нет ошибок или предупреждений.Когда я запускаю его в симуляторе, я вижу в консоли, что я никогда не вхожу в цикл «Пока».это означает, что FMResultSet «rs» не получает никакого результата от SQL-запроса. Я получаю сообщение «Успешно открыт» означает, что моя база данных была открыта без проблем, и путь к базе данных, имя базы данных и т. д. верны.Мой запрос также корректен, так как он не показывает ошибку запроса в консоли.Но я не получаю сообщение "пока цикл начался".Мой массив базы данных также пуст, поэтому я знаю, что цикл while не работает.Я использую базу данных FMD.Вот мой код

-(void) readWordsfromDatabase
{   
db=[FMDatabase databaseWithPath:globalDatabasePath];
globalDatabaseArray=[[NSMutableArray alloc] init];
[db setLogsErrors:TRUE ];
[db setTraceExecution:TRUE];
if (![db open])
{
    NSLog(@"Failed to open database");
    return;
}
else {
    NSLog(@"Opened successfully");
}
FMResultSet *rs= [db executeQuery:@"SELECT * FROM keywords"];
while([rs next])
{
    NSLog(@"while loop started");

    int aPK=[rs intForColumn:@"pk"];
    NSString *aText=[rs stringForColumn:@"text"];
    NSLog(@"aText is %@",aText);

    singleKeyword *sk=[[singleKeyword alloc] initWithData:aPK :aText];
    [globalDatabaseArray addObject:sk];
    [sk release];

            NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:0]);  
    NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:1]);
}//while closed
//NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:0]);
    // NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:1]);   
[db close];
}

1 Ответ

0 голосов
/ 24 июля 2011

FMDB открывает базу данных независимо от того, существует ли путь к файлу или нет (на самом деле FMDB также предназначен для вызова [FMDatabase databaseWithPath:nil] без появления ошибки или предупреждения).Если вы хотите проверить, открываете ли вы «правильную» базу данных, вы должны использовать NSFileManager и проверить путь.

- (BOOL)fileExistsAtPath:(NSString *)path

Самой распространенной ошибкой является то, что ваш sqlite-менеджер и ваша FMDB ссылаются на разные базы данных.

...