Результат запроса SQLite отсутствует в первой строке

0

Мне нужно проверить временную метку в таблице базы данных SQLite на временную метку, которая у меня есть как переменная. Когда я запускаю инструкцию select для своей таблицы, мне кажется, что отсутствует первая запись.

lastMod = dict[@"LastMod"];
[self openDB];
NSString *sqlQuery = [NSString stringWithFormat:@"SELECT LastMod FROM %@ order by Lastmod desc", newTableName];

const char *sqlQueryChars = [sqlQuery cStringUsingEncoding:[NSString defaultCStringEncoding]];

sqlite3_stmt *statementChk;

sqlite3_prepare_v2(congressDB, sqlQueryChars, -1, &statementChk, NULL);

if (sqlite3_step(statementChk) == SQLITE_ERROR){

    NSAssert1(0, @"Error: %s", sqlite3_errmsg(congressDB));
    sqlite3_close(congressDB);

} else {

    if (sqlite3_step(statementChk) == SQLITE_ROW) {

        NSString *resultString = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statementChk, 0)];
        NSNumberFormatter *resultNumberFormatter = [[NSNumberFormatter alloc] init];
        [resultNumberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
        NSNumber *resultNumber = [resultNumberFormatter numberFromString:resultString];

        if (resultNumber){

            if ([lastMod integerValue] > [resultNumber integerValue]) {

                needsUpdating = @"YES";

            } else {

                needsUpdating = @"NO";

            }

        }

    } else {

        needsUpdating = @"YES";  // No rows found, table is empty and needs filling

}

Самые новые записи в базе данных:

1390393860
1390385996
1390385681
...

Тот, который я хочу и ожидаю, - это первое - 1390393860, самое большое число (это самая новая запись). Но я получаю второй 1390385996. Если я изменил запрос на:

NSString *sqlQuery = [NSString stringWithFormat:@"SELECT LastMod FROM %@ order by Lastmod desc limit 1", newTableName]; 

Программа говорит, что строки не были возвращены. Тестирование этого запроса непосредственно в базе данных возвращает правильную строку. Что происходит?

Благодарю.

Теги:
cocoa-touch

1 ответ

0
Лучший ответ

sqlite_step() вы дважды вызываете sqlite_step():

if (sqlite3_step(statementChk) == SQLITE_ERROR){

    NSAssert1(0, @"Error: %s", sqlite3_errmsg(congressDB));
    sqlite3_close(congressDB);

} else {

    if (sqlite3_step(statementChk) == SQLITE_ROW) {

Когда вы должны использовать только последний вызов:

if (sqlite3_step(statementChk) == SQLITE_ROW) {

(вы хотите получить следующую строку и отреагировать, только если есть ошибка).

  • 0
    Это именно то, в чем проблема, глупая ошибка для меня. Спасибо за вашу помощь, высоко ценится!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню