我有一个无效的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];
这些是我检查的内容:
我NSLoged我的字符串,它看起来像这样:
UPDATE meetings SET MEETING_DESCRIPTION="AAA12" WHERE MEETING_ID="791D8251-2FC4-498B-85B3-C1002C04E329:F1C40061-1308-4179-B72E-7E3EEDB85E1A"
我想也许我的数据库找不到这个meetingID所以我为这个messageID运行了一个SELECT查询并找到了它。
我几乎无望。任何人都可以想到我没有尝试过的东西吗?
由于
答案 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];