Я не могу перехватить пустой набор результатов FMDB - PullRequest
2 голосов
/ 14 декабря 2011

У меня проблемы с перехватом пустого набора результатов из FMDB.Код ниже.Я получаю NSLog из базы данных открытия и закрытия и NSLog "1", но ни один из них в операторе If!Если у меня есть данные в базе данных, это нормально, но я хочу перехватить и отредактировать результат, если база данных пуста.

    [self openDatabase];

NSNumberFormatter *nfcurrency = [[NSNumberFormatter alloc]init];
[nfcurrency setNumberStyle:NSNumberFormatterCurrencyStyle];
[nfcurrency setLocale:[NSLocale currentLocale]];

FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 1,1;"];
//FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 1,1;"];
NSLog(@"1");
if (result == NULL) {
    NSLog(@"Last BFNeeded Result = nil");
} else {
    while ([result next]) {
        NSLog(@"HERE");
        NSString *lastBFNeeded = [nfcurrency stringFromNumber:[NSNumber numberWithDouble:[result doubleForColumn:@"BFNeeded"]]];
        NSLog(@"lastBFNeeded=%@",lastBFNeeded);
    }
}

NSLog(@"ClosingDB");
[self closeDatabase];

Продолжение после получения первого ответа:

Я не могу получитьhasAnotherRow работать как положено.У меня есть этот код:

FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 0,1;"];

if (result == nil) {
    NSLog(@"Last BFNeeded Result = nil");
}
else {
    NSLog(@"has results1: %@", [result hasAnotherRow] ? @"YES" : @"NO");
    while ([result next]) {
        NSLog(@"has results2: %@", [result hasAnotherRow] ? @"YES" : @"NO");
    }
}

С базой данных, которая возвращает результат, я получаю result1 NO, result2 YES, поэтому я предполагаю, что hasAnotherRow должен идти внутри цикла while ([result next]).Однако с пустой базой данных я получаю результат1 НЕТ, а он даже не достигает результата2!

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

«результат» никогда не будет равен нулю для запроса, который выдает 0 строк.

также не следует сравнивать указатели объектов с NULL - сравните с nil.Смотрите этот вопрос: NULL против ноля в Objective-C

попробуйте это:

FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 1,1;"];

NSLog ( @"has results: %@", [result hasAnotherRow] ? @"YES" : @"NO" );
0 голосов
/ 29 мая 2015
NSInteger count;

query=[NSString stringWithFormat:@"select Count(*) from %@  where name = 'brandon' ",dbName];
results = [database executeQuery:query ];
while([results next]) {
    count  = [results intForColumnIndex:0];
    NSLog(@"count:%d",count);
}

установит счет равным нулю, если нет записи

...