2012-03-30 3 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

что делает его печать в консоли? OK - FAIL - проблема с БД? –

+0

Он говорит «ОК», но когда я набираю select * SQL в консоли, он не обновляется. – Illep

+0

Зачем использовать * stringWithFormat *, если вы действительно не вставляете какие-либо переменные внутри? Попробуйте литерал, если он не работает, удалите одинарные кавычки. – lawicko

ответ

4

Всегда передавайте аргументы SQL-запросу как тип объекта, пожалуйста, посмотрите, как аргументы передаются SQL-запросу. Даже если вы передаете номер, передать его в качестве

[NSNumber numberWithInt:someValue] 

Попробуйте это:

-(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

Смежные вопросы