UPDATE不与FMDB一起运行,使用sqlite命令行运行正常

时间:2010-11-18 16:38:54

标签: iphone cocoa-touch sqlite ios4 fmdb

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

这就是我正在做的事情:

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
  • 运行
  • 仅运行更新(已手动插入条目)。
  • 猛烈撞击桌子。

2 个答案:

答案 0 :(得分:3)

那里有两个sqlite语句,FMDB不会自动将单个复合行转换为两个单独的语句。您需要单独运行它们,这是sqlite3命令行工具正在执行的操作。

答案 1 :(得分:0)

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

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

当您通过命令行检查数据库时,您是否检查了项目包或构建/调试(发布)文件夹中的数据库?