2012-03-01 18 views
0

私は以下のコードを持っています。データベースに4レコードありますが、ループは2回実行されます。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

はいu r正しいsqlite3_finalize(ステートメント)をコメントします。 whileループの中で私のコードはうまくいきましたRavinに感謝します。 – user1242803

+0

@ user1242803:あなたがRavinの答えに満足したら、彼の答えを受け入れる....このリンクをチェックしてください.. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Aravindhan

答えて

0

この質問を完了して閉じるには、私は答えに自分のコメントを入れています。

sqlite3_finalize(ステートメント)をコメントしてみてください。 whileループの内側。 、について説明:

SQLite.orgは

sqlite3_finalize()関数が用意 文を削除するために呼び出されると言います。

また、

アプリケーションが 回避リソースリークするために、すべてのプリペアドステートメントを確定しなければなりません。 最終的に準備されたステートメントを使用しようとすると、アプリケーションにとって致命的なエラーになります。 ファイナライズされた後の準備済みステートメントのいずれかの使用 は、 が定義されておらず、segfaultsおよびheap などの望ましくない動作を引き起こす可能性があります。

おかげで、

2

ワウ!ネイティブにsqllite3を使用する別のもの! :)

FMDBという名前の外部のlib(2ファイル)、つまりsqllite3へのラッパーをお勧めします。

https://github.com/ccgus/fmdb

使いやすいです。お役に立てれば。

関連する問題