代码之家  ›  专栏  ›  技术社区  ›  Nimrod Shai

FMDB更新查询不工作

  •  1
  • Nimrod Shai  · 技术社区  · 10 年前

    我有一个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. 我对字符串进行了NSLog,结果如下:

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

    我很绝望。有人能想到我没有尝试过的东西吗?

    谢谢

    3 回复  |  直到 10 年前
        1
  •  3
  •   Nimrod Shai    10 年前

    好了,伙计们,

    多亏了我的同事,我找到了答案。

    方法[db executeQuery:updateMeeting]错误,您应该使用[db execute Update:updateMeet];

    这很烦人,因为我认为更新也是一个查询,但黑客。。。它现在起作用了:)

        2
  •  1
  •   Community CDub    8 年前

    你应该用这个

    [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

        3
  •  0
  •   virus    10 年前

    试试看,也许这可以解决你的问题。快乐编码!!!!

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