2012-06-27 18 views
5

私はiPhoneアプリで作業しています。ボタンをクリックしてコードを呼び出すと、最初のクリック時にデータベーステーブルが更新されます。 2回目にクリックすると成功メッセージが表示されますが、データベーステーブルは更新されません。iphoneデータベースのアップデート問題

コードは次のとおりです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Games.sqlite"]; 

NSMutableArray *arrayRandomLevel = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; 
for (int i = 0; i< 5; i++) 
{ 
    NSUInteger randomIndex = arc4random() % 5; 
    [arrayRandomLevel exchangeObjectAtIndex:i withObjectAtIndex:randomIndex]; 
    //firstObject +=1;  
} 
NSLog(@"arrayRandomLevel = %@",arrayRandomLevel); 

for (int level = 0; level < 5; level++) 
{ 
    NSString *strLevel = [@"" stringByAppendingFormat:@"%d",level+1]; 
    int finalLevel = [[arrayRandomLevel objectAtIndex:level] intValue]; 

    NSLog(@"Static level = %@, Changed level = %d",strLevel,finalLevel); 

    sqlite3 *database; 
    if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) 
    { 

     NSString *cmd = [NSString stringWithFormat:@"UPDATE zquestionsdata SET zdifficultylevel = %d WHERE zanswertype = '%@' AND zquestiontype = '%@';",finalLevel,strLevel,@"Geni"]; 

     const char * sql = [cmd UTF8String]; 

     sqlite3_stmt *compiledStatement; 

     if(sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL) == SQLITE_OK) 
     { 
      sqlite3_step(compiledStatement); // Here is the added step. 
      NSLog(@"update SUCCESS - executed command %@",cmd); 
     } 
     else { 
      NSLog(@"update FAILED - failed to execute command %@",cmd); 
     } 

     sqlite3_finalize(compiledStatement); 

    } 
    else { 
     NSLog(@"pdateContact FAILED - failed to open database"); 
    } 

    sqlite3_close(database); 

} 

この上で私を助けたり、テーブルを毎回更新するための他のソリューションを提供してください。 ありがとうございます。

+0

の下に与えられ、このラインzquestiontype =「%でクエリ – janusbalatbat

+0

をテストするために、あなたのSQLiteデータベースブラウザ上でそれを貼り付けようあなたはセミコロンが必要だと思っていませんか? – janusbalatbat

+1

私はcmdをコピーしてsqliteブラウザで動作させようとしていますが、そこではテーブルの行を更新していますが、私の関数ではありません。 –

答えて

1

場合は更新処理が

で起こります(sqlite3_step(ステートメント)== SQLITE_DONE)

あり割り当てられた値は、上記のようなデータベースの文を見に行くと店ます。文を準備するから

コードは、コンソールからのメッセージをコピーし、あなたのNSString * CMDのNSLog

if(sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL) == SQLITE_OK) 
    { 
     if(sqlite3_step(statement) == SQLITE_DONE) 
     { 
      //assign new values here 

     } 
    } 
+0

通常通り、 (sqlite3_step(statement)== SQLITE_DONE)ブロックが、テーブルがこれで更新されていない場合は、その中に入ってくるをクリックします。古い結果を表示します。2回目、3回目などでクリックして更新します。 –