2012-03-01 4 views
0

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

- (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); 
   } 
+0

Попробовать комментируя sqlite3_finalize (заявление); внутри цикла while. – Ravin

+0

yes u r right, комментируя sqlite3_finalize (statement); внутри цикла while мой код теперь работает отлично Спасибо Ravin. – user1242803

+0

@ user1242803: Если вы удовлетворены ответом Равина, ответьте на его ответ .... проверьте эту ссылку .. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Aravindhan

ответ

0

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

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

SQLite.org говорит функция

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

Кроме того,

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

Спасибо,

2

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

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

https://github.com/ccgus/fmdb

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