FMDB executeUpdate DROP命令确实停止应用程序

我想在我的名为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"); 

该应用程序停止在查询的位置。 在控制台中显示查询之前的NSLog。 在查询之后,NSlog直接显示在控制台窗口中。 另外,一个名为database.db-journal的临时文件在应用程序运行时在模拟器应用程序文件夹中不断创build和删除。 该应用程序不会崩溃,不会提供任何错误,不会继续…删除查询中的“IF EXISTS”不起作用,删除反引号不起作用,删除分号不起作用。
启用查询跟踪只显示FMDB正在处理我的查询,没有更多的显示。

我真的很困惑,为什么会发生这种情况。 我认为这个表在被删除前必须是空的,所以我添加了一个查询来删除它中的每个logging。 但是ID并不重要,该应用程序仍然陷入了drop-query。 我用尽了解决这个错误的可能性。
如果我在SQLite数据库浏览器2中执行drop命令,一切正常。

debugging器的进一步研究表明,FMDB封装进入无限循环,因为语句的返回值等于SQLITE_LOCKED常量,这意味着我要删除的表被locking。 在以前的查询中发送“UNLOCK TABLES”并不能解决这个问题。 为什么表被locking? 为什么从locking的表中删除logging将起作用?

我遇到了同样的问题,通过在更新之前调用closeOpenResultSets实例上的FMDB来解决问题,就像TRD所说的那样(虽然我不必closures并重新打开数据库)

我终于摆脱了这个讨厌的行为。 我在丢弃查询之前立即closures了数据库连接,并立即重新打开它。 如果我不得不猜测,我会说在我的源代码的早期部分中的SELECT查询使连接被locking为DROP语句。 因此closures数据库连接并重新打开它将重置这些锁。 希望这可以帮助你@JLoewy。