【发布时间】:2013-04-23 07:05:03
【问题描述】:
我有一个 FMDB executeUpdate 导致无限循环:
FMDatabase *db = [FMDatabase databaseWithPath:[CDDBManager getDatabasePath]];
[db closeOpenResultSets];
[db close];
NSLog(@"successfully pass closes");
[db open];
NSLog(@"successfully pass open");
[db setTraceExecution:YES];
BOOL success = [db executeUpdate:@"INSERT OR REPLACE INTO Player (id, ..., is_user) VALUES (?, ..., ?)",
[NSNumber numberWithInt:self.player_id],
...
[NSNumber numberWithInt:1]];
NSLog(@"end update");
[db close];
我在两个不同的 VC 中调用此方法,其中一个完美地工作......在另一个我有一个无限循环(我在 FMDB 的“do{} while()”中打印重试),所以我不见“结束更新”... 如您所见,我已经尝试关闭所有结果集和数据库...
任何人都可以看到我失败的地方吗?
欢迎所有建议。
【问题讨论】:
-
首先,我会检查 FMDB 打开调用的结果,如果打开失败,它会返回 false。另外,两个 db 调用是否都在同一个线程上?
-
所有线程的回溯将有很大帮助——数据库可能被锁定在另一个线程(甚至进程)中。
-
好的,我已经尝试获取 open 的返回,数据库已正确打开......我如何才能有回溯?当我发出请求时,我所有的线程都正常完成:/
-
不是 SQLITE_LOCK 而是 SQLITE_BUSY,我不明白我的数据库怎么会忙.. 前面的工作已经完成了......
-
有人有同样的问题吗?