FMDB executeUpdate DROP命令会暂停应用程序

TRD*_*TRD 4 sqlite cocoa-touch fmdb ios

我想在名为database.db的SQLite数据库文件中删除一个表.使用后

NSLog(@"i show up in the console");
[db executeUpdate:@"DROP TABLE IF EXISTS `article`;"];
NSLog(@"i will not show up in the console");
Run Code Online (Sandbox Code Playgroud)

应用程序停在查询的位置.查询之前的NSLog显示在控制台中.查询后直接在控制台窗口中不显示NSlog.此外,在应用程序运行时,在模拟器应用程序文件夹中连续创建并删除名为database.db-journal的临时文件.该应用程序不会崩溃,不会给出任何错误,也不会继续...删除查询中的"如果EXISTS"不起作用,删除反引号不起作用,删除分号不起作用.
启用查询跟踪仅显示FMDB正在处理我的查询,没有更多显示.

我真的很困惑为什么会这样.我认为该表必须是空的才能删除它,所以我添加了一个查询来删除其中的每个记录.但是id并不重要,应用程序仍然被丢弃查询抓住了.我没有办法解决这个错误.
如果我在SQLite数据库浏览器2中执行drop命令,一切正常.

使用调试器的进一步研究表明,FMDB包装器进入无限循环,因为语句的返回值等于SQLITE_LOCKED常量,这意味着我想要丢弃的表被锁定.在先前的查询中发送"UNLOCK TABLES"并不能解决这个问题.桌子锁定的原因是什么?为什么从锁定表中删除记录会起作用?

alt*_*ler 14

我有同样的问题,得到它通过调用解决closeOpenResultSetsFMDB实例在更新之前,就像TRD说(虽然我没有关闭和完全打开数据库)