代码之家  ›  专栏  ›  技术社区  ›  Alastair Stuart

更新不使用fmdb运行,使用sqlite命令行运行正常

  •  0
  • Alastair Stuart  · 技术社区  · 15 年前

    我正在使用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为是,表示没有任何问题。以下是一个示例调用:

    <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运行
    • 仅运行更新(已手动插入条目)。
    • 头撞在桌子上。
    2 回复  |  直到 15 年前
        1
  •  3
  •   BJ Homer    15 年前

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

        2
  •  0
  •   Cesar A. Rivas    15 年前

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

    如果项目文件夹中有数据库,则在编译时,xcode将在build/debug或build/release中创建应用程序包,而不是在项目文件夹中。检查是否更新了build/debug(release)中的数据库?不会更新项目文件夹中的数据库,因为您可能会请求应用程序包的位置。

    当您通过命令行检查数据库时,您检查过项目包或build/debug(release)文件夹中的数据库吗?

    推荐文章