【问题标题】:UPDATE doesn't run with FMDB, runs fine with sqlite command lineUPDATE 不能使用 FMDB 运行,使用 sqlite 命令行运行良好
【发布时间】:2010-11-18 16:38:54
【问题描述】:

我正在使用 FMDB 与 SQLite 数据库进行交互。我让它插入行很好,但是当我尝试更新其中一个时,更新不会发生,但没有报告错误。

这就是我正在做的事情:

userHistoryDB.logsErrors = YES;
userHistoryDB.traceExecution = YES;
NSString *query = [NSString stringWithFormat:
         @"INSERT OR IGNORE INTO phrase_history (code, %@) VALUES (\"%@\", 0); "
         @"UPDATE OR FAIL phrase_history SET %@ = %@ + 1 WHERE code = \"%@\";",
         countTypeColumn,
         phraseCode,
         countTypeColumn,
         countTypeColumn,
         phraseCode];
BOOL rc = [userHistoryDB executeUpdate:query];

rc 是 YES,表示没有任何问题。这是一个示例调用:

<FMDatabase: 0x5303af0> executeUpdate: INSERT OR IGNORE INTO phrase_history (code, presented) VALUES ("grapefruit", 0); UPDATE OR FAIL phrase_history SET presented = presented + 1 WHERE code = "grapefruit";

就 FMDB 而言,它执行得很好。但是,记录不会增加。 SQL 没有任何问题 - 如果我将其粘贴到 sqlite3 命令行工具中,它可以完美运行。

关于它为什么不运行的任何想法?我尝试过的事情都无济于事:

  • 将行包含在事务中
  • 使用 executeQuery 运行
  • 仅运行更新(已手动插入条目)。
  • 用头撞桌子。

【问题讨论】:

    标签: iphone cocoa-touch sqlite ios4 fmdb


    【解决方案1】:

    您有两个 sqlite 语句,FMDB 不会自动将您的单个复合行转换为两个单独的语句。你需要单独运行它们,这就是 sqlite3 命令行工具正在做的事情。

    【讨论】:

    • 我认为情况并非如此。我试过只运行 UPDATE (条目已经存在),我得到了相同的结果。此外,FMDB 与其他多行 SQL 查询没有任何问题。
    • 我收回了这一点,你完全正确。我以为我已经尝试过了,但显然有些莫伦炎蔓延了。谢谢,享受赏金!
    • @coob 不要忘记您需要分配赏金并接受答案,否则它将丢失。
    【解决方案2】:

    您的数据库存储在哪里?在捆绑?还是在其他地方?

    如果您的项目文件夹中有数据库,当您编译时,Xcode 将在 build/Debug 或 build/Release 中创建应用程序包,这是您的数据库所在的位置,而不是项目文件夹中的那个。检查 build/Debug(Release) 中的数据库是否更新?您的项目文件夹中的数据库将不会更新,因为您可能会请求应用程序包的位置。

    当您通过命令行检查数据库时,您是在项目包中还是在 build/Debug(Release) 文件夹中检查数据库?

    【讨论】:

    • 数据库存储在 Documents 文件夹中 - 正如我在问题中提到的,插入它没有问题。
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2017-12-24
    • 2012-01-18
    相关资源
    最近更新 更多