2011-02-03 15 views
1

iPhoneのアプリケーションに複数のテーブルを挿入する必要があります。このデータにはテーブル名があります。SQliteの別のテーブルに挿入

これは私がやろうとしたものである。

NSString *statement = @"insert into ? values (?, ?, 0)"; 
    sqlite3_stmt *compiledStatement; 
    if(sqlite3_prepare_v2(database, [statement UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK) 
    { 
     for(UpdateItems *item in updateData){ 
      sqlite3_bind_text( compiledStatement, 1, [item.table UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text( compiledStatement, 2, [item.code UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text( compiledStatement, 3, [item.data UTF8String], -1, SQLITE_TRANSIENT); 

      while(YES){ 
       NSInteger result = sqlite3_step(compiledStatement); 
       if(result == SQLITE_DONE){ 
        break; 
       } 
       else if(result != SQLITE_BUSY){ 
        break; 
       } 
      } 
      sqlite3_reset(compiledStatement); 
     } 
    } else 
     printf("db error: %s\n", sqlite3_errmsg(database)); 

    sqlite3_finalize(compiledStatement); 
    sqlite3_close(database); 

上記のスクリプトを実行している私はエラーを取得する:いいえ、そのようなテーブル:?これは正常ですが、sqlite3_prepare_v2ステートメントのようにデータはまだバインドされていないため、SQLiteはテーブルを認識しません。

ループの内側に穴sqlite3_prepare_v2ブロックを移動し、stringWithFormatを使用します。最初の疑問符をテーブル名で変更します。これを準備した後、他の解決方法がありますか?

答えて

1

これは最も簡単な解決策です。

ただし、毎回クエリを準備しないとパフォーマンス上の利点があります。パフォーマンスが問題の場合は、テーブル名から準備されたクエリへのマップの作成をお勧めします。次に、最初にテーブル名に遭遇したときにクエリを準備するだけです。

+0

ありがとうございます。マッピングの考え方は良いです。しかし、私は結局のところ最も簡単な解決法を使用しました。 – CristiC

関連する問題