Sqlite问题与Bool值

时间:2014-05-16 14:57:48

标签: objective-c sqlite ios7 fmdb

我有一张包含3个Bool列的表。

  1. 看不见默认值1
  2. 已回答错误默认值0
  3. AnsweredWrong Default 0
  4. 现在所有看不见的行都是1,AnsweredCorrect 0和AnsweredWrong 0。 现在我想计算所有3列的ON值。我在追问

    SELECT SUM(Unseen) as Unseen, SUM(AnsweredCorrect) as Correct, SUM(AnsweredWrong) as Wrong FROM table_name 
    

    当我在Sqlite浏览器中运行此查询时,它返回

    看不见20, 正确0, 错了0

    哪个是对的。但是当我在代码中使用它时,它返回所有值0。

    FMResultSet *query = [db executeQuery:[NSString stringWithFormat:@"SELECT SUM(Unseen) as Unseen, SUM(AnsweredCorrect) as Correct, SUM(AnsweredWrong) as Wrong FROM %@;",tableName]];
    
    [counters addObject:[NSNumber numberWithInt:[query intForColumn:@"Unseen"]] ];
    [counters addObject:[NSNumber numberWithInt:[query intForColumn:@"Correct"]] ];
    [counters addObject:[NSNumber numberWithInt:[query intForColumn:@"Wrong"]] ];
    

    我正在使用FMDB进行数据库操作。 有什么问题?

    感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果这是用于查询数据库和访问FMResultSet的全部代码,我将查看FMDatabase类的文档。特别是关于-executeQuery的讨论:

  

为了遍历查询结果,使用while()循环。您还需要从一个记录“步进”(通过[FMResultSet next])到另一个记录。

我想你在FMResultSet中只有一个项目,但需要“踩”它。

编辑:

您可能需要使用?而不是在查询字符串中使用%@占位符?而是根据文档。

  

的executeQuery:

     

执行select语句

     
      
  • (FMResultSet *)executeQuery:(NSString *)sql,...参数sql要执行的SELECT语句,可选吗?占位符。
  •   
     

...   要绑定的可选参数? SQL中的占位符   声明。这些应该是Objective-C对象(例如NSString,   NSNumber等),而不是基本的C数据类型(例如int,char *,   等)。

答案 1 :(得分:0)

这没有多大意义,所以我建议你先做一些检查。

您需要了解自己在做什么。

您可能认为自己连接到一个数据库文件,但是您已连接到另一个数据库文件。

尝试在应用中执行所有创建并在代码中添加数据步骤,而不是在应用外部创建数据库表。

这意味着您要连接到您正在阅读的相同sqlite文件。

如果这样做,即SQL返回1,0,0,则找到新的SLQlite数据库文件。

另一种方法是删除您认为正在读取的SQLite文件,如果代码仍然有效,那么您将连接到另一个SQLite数据库文件。

如果您连接到正确的文件,请尝试更改数据库中的值,将一些值添加到其他列。