FMDB更新查询不起作用

时间:2014-08-26 07:09:47

标签: objective-c fmdb

我有一个无效的FMDB更新查询。这是我的代码:

FMDatabase *db = [self openDatabase];

if (![db open]) {
    return;
}

NSString *updateMeeting = [NSString stringWithFormat:@"UPDATE meetings SET MEETING_DESCRIPTION=\"%@\" WHERE MEETING_ID=\"%@\"",meeting.meetingDescription, meeting.meetingId];

[db beginTransaction];
[db executeQuery:updateMeeting];
[db commit];
[db close];

这些是我检查的内容:

  1. 我传递的属性是对象,不是零。
  2. 有些地方在线使用“%@”,有些使用'%@',有些使用%@,有些使用?这些都不适合我。
  3. 我NSLoged我的字符串,它看起来像这样:

    UPDATE meetings SET MEETING_DESCRIPTION="AAA12" WHERE MEETING_ID="791D8251-2FC4-498B-85B3-C1002C04E329:F1C40061-1308-4179-B72E-7E3EEDB85E1A"
    
  4. 我想也许我的数据库找不到这个meetingID所以我为这个messageID运行了一个SELECT查询并找到了它。

  5. 我几乎无望。任何人都可以想到我没有尝试过的东西吗?

    由于

3 个答案:

答案 0 :(得分:3)

好的,

我的同事感谢答案。

方法[db executeQuery:updateMeeting]是错误的,你应该使用[db executeUpdate:updateMeeting];

这很烦人,因为我认为Update也是一个查询但是什么黑客......它现在有效:)

答案 1 :(得分:1)

你应该使用这个

[db executeUpdate:@"INSERT INTO myTable VALUES (?)", yourVar];

而不是

stringWithFormat

另外,我将此用于交易

FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:YOUR_PATH];

[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    [db executeUpdate:@"UPDATE meetings SET MEETING_DESCRIPTION=? WHERE MEETING_ID=?",meeting.meetingDescription, meeting.meetingId"];

    if (!db) {
        NSLog(@"Some problems... again...")
        *rollback = YES;
        return;
    } }];

如果您需要全局队列,则可以使用解决方案FMDatabaseQueue Error: database is locked

答案 2 :(得分:0)

  

尝试这可能是可以解决您的问题。快乐的编码!!!!

FMDatabase *db = [self openDatabase];

    if (![db open]) {
        return;
    }

    NSString *updateMeeting = [NSString stringWithFormat:@"UPDATE meetings SET MEETING_DESCRIPTION = ? WHERE MEETING_ID = ?"];

    NSArray *paramList = @[meeting.meetingDescription, meeting.meetingId];
    [db beginTransaction];
    [db executeQuery:updateMeeting withArgumentsInArray:paramList];
    [db commit];
    [db close];