5

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

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

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);

}

これについて私を助けるか、毎回テーブルを更新するための他の解決策を提供してください。前もって感謝します。

4

1 に答える 1

1

更新プロセスは次の場所で行われます

if(sqlite3_step(ステートメント) == SQLITE_DONE)

割り当てられた値がデータベースに保存され、ステートメントは上記のようになります。

Prepare ステートメントのコードを以下に示します

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

         }
     } 
于 2012-06-27T12:55:29.000 に答える