我想在名为 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 数据库浏览器 2 中执行 drop 命令,一切正常。
调试器的进一步研究表明 FMDB 包装器进入无限循环,因为语句的返回值等于 SQLITE_LOCKED 常量,这意味着我要删除的表已锁定。在之前的查询中发送“UNLOCK TABLES”并不能解决这个问题。为什么表被锁定?为什么从锁定的表中删除记录会起作用?
最佳答案
我遇到了同样的问题,就像 TRD 所说的那样(虽然我没有完全关闭并重新打开数据库)
关于ios - FMDB executeUpdate DROP 命令确实停止了应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7331504/