2012-03-30 78 views
1

我可以从我的SQLITE数据库中读取数据,但无法更新它。我想知道数据库是否可写。更新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 - 失败 - 数据库问题? – 2012-03-30 11:46:14

+0

它说OK,但是当我在控制台中键入select * SQL时,它没有更新。 – Illep 2012-03-30 12:02:40

+0

为什么使用* stringWithFormat *如果你没有真的放入任何变量?尝试文字,如果它不起作用删除单引号。 – lawicko 2012-03-30 19:04:30

回答

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 2016-01-15 19:03:08