我想在名为 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 的临时文件。该应用程序不会崩溃,不会给出任何错误并且不会继续...删除查询中的“IF EXISTS”不起作用,删除反引号不起作用,删除分号不起作用。
启用查询跟踪仅显示 FMDB 正在处理我的查询,没有更多显示。
我真的很困惑为什么会这样。我认为该表必须为空才能删除,因此我添加了一个查询以删除其中的每条记录。但是 id 无关紧要,该应用程序仍然会在 drop-query 中被捕获。我没有解决此错误的可能性。
如果我在 SQLite Database Browser 2 中执行 drop 命令,一切正常。
对调试器的进一步研究表明,FMDB 包装器将进入无限循环,因为该语句的返回值等于 SQLITE_LOCKED 常量,这意味着我要删除的表已锁定。在之前的查询中发送“UNLOCK TABLES”并不能解决这个问题。为什么桌子被锁住了?为什么从锁定的表中删除记录会起作用?