2014-05-16 26 views
4

我有一个3 Bool列的表。与Bool值Sqlite问题

  1. 看不见的默认值1
  2. AnsweredCorrect默认值0
  3. AnsweredWrong默认值0

现在都看不见行是1,AnsweredCorrect 0和0 AnsweredWrong现在 我要统计所有3列为他们的ON值。我quering

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。 有什么不对?

感谢您的帮助!

+1

@dasblinkenlight这是一个错字,修正了。 –

+2

您必须使用与您通过“sqlite浏览器”查看的数据库不同的数据库。 – trojanfoe

+0

不,都是一样的。 –

回答

0

这没什么意义,所以我建议你先做一些检查。

你需要找出你在做什么。

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

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

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

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

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

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

0

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

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

我想你在FMResultSet中只有一个项目,但是需要“步进”。

编辑:

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

的executeQuery:

执行select语句

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

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

+0

我正在步进,但没有写在问题代码中。 –

+0

我已经更新了我的答案。没有看到数据库打开的地方,查询和结果集的步骤,我不知道我能提供多少帮助。 –