2012-03-30 13 views
1

私のSQLite DBから読み込めましたが、更新できませんでした。私はデータベースが書き込み可能かどうか疑問に思います。SQLiteクエリの更新FMDB - 初心者

SQLをSQLコンソールにコピーすると、コードは正常に実行されます。したがって、SQLに問題はありません。

-(BOOL) updateScores{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"uniques.sqlite"]; 

    FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath]; 
    BOOL success; 

    if ([db open]) { 

     if ([db hadError]) { 
      NSLog(@"DB Error %d: %@", [db lastErrorCode], [db lastErrorMessage]); 
     } 

     success = [db executeUpdate:[NSString stringWithFormat:@"UPDATE Score SET answer='11' WHERE name LIKE 'jack'"]]; 

     if (success) { 
      NSLog(@"OK"); 
     }else { 
      NSLog(@"FAIL"); 
     } 

     [db close]; 
    }else { 
     NSLog(@"Problem with DB"); 
    } 

    return success; 
} 
+0

それがコンソールに何を印刷しない:あなたが番号を渡している場合でも、これは試してみてください

[NSNumber numberWithInt:someValue] 

としてそれを渡しますか? OK - FAIL - DBに問題がありますか? –

+0

それはOKだと言いますが、コンソールにselect * SQLを入力すると、更新されていません。 – Illep

+0

実際に変数を入れないと* stringWithFormat *を使うのはなぜですか?リテラルを試してください。動作しない場合は、単一引用符を削除してください。 – lawicko

答えて

4

必ずオブジェクト型としてSQLクエリーに引数を渡す、引数はSQLクエリに渡される方法をご覧ください。

-(BOOL) updateScores 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"uniques.sqlite"]; 

    FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath]; 
    BOOL success = NO; 

    if ([db open] != YES) { 
     NSLog(@"DB Error %d: %@", [db lastErrorCode], [db lastErrorMessage]); 
     return NO; //VERY IMPORTANT 
    } 

    [db beginTransaction]; 
    success = [db executeUpdate:@"UPDATE scores SET answer = ? WHERE name like ?", @"1", @"jack"]; 

    if (success) { 
     NSLog(@"OK"); 
     [db commit]; 
     [db close]; 
    }else { 
     NSLog(@"FAIL"); 
    } 

    return success; 
} 
+0

素敵な仕事...私の問題を解決しました – ZeeroCool77