Вставка строк в базу данных с использованием Sqlite Iphone - PullRequest
0 голосов
/ 01 марта 2012

У меня есть следующий код n У меня есть 4 записи в базе данных, но цикл выполняется 2 раза n, получая только первую строку два раза, в чем проблема в моем коде?

- (void) getAllRowsFromTableName:(NSString *)tableName{
    NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM '%@'",tableName];
   
    NSLog(@"query is :%@",qsql);
    sqlite3_stmt *statement;
    if (sqlite3_prepare_v2(db,[qsql UTF8String] , -1, &statement,nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            NSLog(@"loop");
            int catId = sqlite3_column_int(statement, 1);
             NSLog(@"***CatId is :%d",catId);

                sqlite3_finalize(statement);
        }
        sqlite3_finalize(statement);
    }

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Вау! Другой, который использует sqllite3 изначально !! :)

Я бы предложил вам внешнюю библиотеку (2 файла) с именем FMDB , которая является оболочкой для sqllite3.

https://github.com/ccgus/fmdb

Простота в использовании. Надеюсь, это поможет.

0 голосов
/ 01 марта 2012

Просто чтобы завершить и закрыть этот вопрос, я оставляю свой комментарий в ответ.

Попробуйте прокомментировать sqlite3_finalize (оператор); внутри цикла while. Explaination:

SQLite.org говорит

Функция sqlite3_finalize () вызывается для удаления подготовленного заявление.

Кроме того,

Заявка должна завершить каждое подготовленное заявление, чтобы избежать утечек ресурсов. Это серьезная ошибка для приложения попробуйте использовать подготовленное заявление после того, как оно было завершено. Любое использование подготовленное заявление после его завершения может привести к неопределенное и нежелательное поведение, такое как segfaults и heap коррупция.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...