2012-03-01 42 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 2012-03-01 14:22:04

+0

是的,通過評論sqlite3_finalize(語句); while循環內我的代碼現在工作正常謝謝Ravin。 – user1242803 2012-03-01 14:30:57

+0

@ user1242803:如果您滿意Ravin答案,請接受他的答案....查看此鏈接.. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Aravindhan 2012-03-01 15:07:44

回答

0

只是爲了完成和關閉這個問題,我把我的意見,在回答。

試着評論sqlite3_finalize(statement);在while循環中。 釋:

SQLite.org說

的sqlite3_finalize()函數被調用刪除準備 聲明。

此外,

應用程序必須按順序完成所有的準備語句 避免資源泄漏。對於 的應用嘗試在最終完成後使用準備好的語句是一個嚴重的錯誤。 任何使用 的已完成準備好的語句可能導致 未定義和不良行爲,如段錯誤和堆 損壞。

感謝,

2

哇!另一個本地使用sqllite3! :)

我建議你命名FMDB外部LIB(2個文件),這是一個包裝sqllite3

https://github.com/ccgus/fmdb

易於使用。希望這可以幫助。

相關問題