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

标签 ios cocoa-touch sqlite fmdb

我想在名为 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/

相关文章:

sqlite - 带SQLite的ExpressionEngine(CMS)

ios - 如何在 UITextView 中禁用放大

ios - 无法将 viewcontroller 弹出回我的 Storyboard 中的 UITabView

iphone - iOS API 检测无线网络

android - SQLite 数据库被锁定?

database - Room @Query 注释字符串字段不带引号

ios - Alamofire 使用带有字典参数的可选值

ios - slider 拇指不会在自己的 iOS 上拖动

ios - 我的自定义 UITableViewCells 正在影响彼此的状态

iphone - UIViewController 类中的 presentModalViewController