我有一张包含3个Bool列的表。
现在所有看不见的行都是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进行数据库操作。 有什么问题?
感谢您的帮助!
答案 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数据库文件。
如果您连接到正确的文件,请尝试更改数据库中的值,将一些值添加到其他列。