【问题标题】:FMDB Infinite loop due to sqlite3_step and while (retry)由于 sqlite3_step 和 while(重试)导致的 FMDB 无限循环
【发布时间】:2013-04-23 07:05:03
【问题描述】:

我有一个 FMDB executeUpdate 导致无限循环:

FMDatabase *db = [FMDatabase databaseWithPath:[CDDBManager getDatabasePath]];

[db closeOpenResultSets];
[db close];
NSLog(@"successfully pass closes");
[db open];
NSLog(@"successfully pass open");
[db setTraceExecution:YES];
BOOL success = [db executeUpdate:@"INSERT OR REPLACE INTO Player (id, ..., is_user) VALUES (?, ..., ?)",
                [NSNumber numberWithInt:self.player_id],
                ...
                [NSNumber numberWithInt:1]];

NSLog(@"end update");
[db close];

我在两个不同的 VC 中调用此方法,其中一个完美地工作......在另一个我有一个无限循环(我在 FMDB 的“do{} while()”中打印重试),所以我不见“结束更新”... 如您所见,我已经尝试关闭所有结果集和数据库...

任何人都可以看到我失败的地方吗?

欢迎所有建议。

【问题讨论】:

  • 首先,我会检查 FMDB 打开调用的结果,如果打开失败,它会返回 false。另外,两个 db 调用是否都在同一个线程上?
  • 所有线程的回溯将有很大帮助——数据库可能被锁定在另一个线程(甚至进程)中。
  • 好的,我已经尝试获取 open 的返回,数据库已正确打开......我如何才能有回溯?当我发出请求时,我所有的线程都正常完成:/
  • 不是 SQLITE_LOCK 而是 SQLITE_BUSY,我不明白我的数据库怎么会忙.. 前面的工作已经完成了......
  • 有人有同样的问题吗?

标签: ios fmdb


【解决方案1】:

我认为我们遇到了同样的问题。我正在为我想调用我的数据库的每个方法打开一个连接。我通过在初始化时打开连接来修复它。

【讨论】:

  • 哼哼,在此之前,你每次都关门吗?因为,每次打开/关闭都是一样的:/
  • 是的,我每次都在打开和关闭。
  • 感谢您的回复,我要切换分支并测试您的解决方案。你说的是哪个“init”?例如视图控制器?
  • 我只是在使用第一次调用类时调用的初始化块。
  • 无事可做......问题仍然存在...... - 数据库繁忙 - 完成或重置语句的未知错误(5:数据库已锁定) - 数据库查询:插入或替换成团队(id,名称、标签、徽章、back_color、bord_color、desc、powerpoint、ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
【解决方案2】:

很抱歉,这是一个简单的函数错误,我在返回条件子句后关闭 FMResultSet ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多