我有一个包含以下列的SQLite表内容:
-----------------------------------------------
|id|book_name|chapter_nr|verse_nr|word_nr|word|
-----------------------------------------------
sql查询
select count(*) from content where book_name = 'John'
group by book_name, chapter_nr
在DB Browser中返回21行(这是章节数)
相当于ORMLite android:
long count = getHelper().getWordDao().queryBuilder()
.groupByRaw("book_name, chapter_nr")
.where()
.eq("book_name", book_name)
.countOf();
返回828行(这是经文的计数)
据我所知,以上代码被翻译为:
select count(*) from content
where book_name = 'John'
group by book_name, chapter_nr
在数据库浏览器中的结果:
| count(*)
------------
1 | 828
2 | 430
3 | 653
...
21| 542
---------
21 Rows returned from: select count(*)...
因此在我看来,ORMLite作为
countOf()
的结果返回查询的第一行。我已经搜索了很多计算器和谷歌。我找到了这个question(更有趣的是答案)
您还可以通过在Where或QueryBuilder对象上调用> countOf()方法来计算自定义查询中的行数。
//计算此自定义查询中的行数
int numRows = dao.queryBuilder()。where()。eq(“name”,“Joe Smith”)。countOf();
这就是我在做什么(如果我错了,请纠正我),但是以某种方式我得到的行数错误。
所以...我在这里做错了什么,或者
countOf()
没有按照预期的方式工作。注意:
groupBy
而不是groupByRaw
是相同的(根据ORMLite文档的介绍,加入groupBy应该可以)...
.groupBy("book_name")
.groupBy("chapter_nr")
.where(...)
.countOf()
编辑:
getWordDao
从Word
类返回:@DatabaseTable(tableName = "content")
public class Word { ... }
最佳答案
返回828行(这是经文的计数)
这似乎是QueryBuilder.countOf()
机制的限制。它期望一个值,并且不了解在查询计数中添加GROUP BY
的情况。您可以说不是,因为该方法返回一个long
。
如果要提取每个组的计数,则看起来需要执行raw query check out the docs。