android SQLite 数据库上的 ORMLite groupByRaw 和 groupBy 问题

ORMLite groupByRaw and groupBy issue on android SQLite db

我有一个 SQLite table content 包含以下列:

-----------------------------------------------
|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

in DB Browser returns 21 行(这是章节数)

相当于 ORMLite android:

long count = getHelper().getWordDao().queryBuilder()
                        .groupByRaw("book_name, chapter_nr")
                        .where()
                        .eq("book_name", book_name)
                        .countOf(); 

returns 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 returns 查询的第一行是 countOf().

的结果

我搜索了 Whosebug 和 google 很多。我找到了这个 question(更有趣的是答案)

You can also count the number of rows in a custom query by calling the > countOf() method on the Where or QueryBuilder object.

// count the number of lines in this custom query int numRows = dao.queryBuilder().where().eq("name", "Joe Smith").countOf();

这正是我正在做的(如果我错了请纠正我),但不知何故我只是得到了错误的行数。

所以...要么我在这里做错了,要么 countOf() 没有按照预期的方式工作。

注意:与 groupBy 而不是 groupByRaw 相同(根据 ORMLite 文档,加入 groupBy 应该有效)

...
.groupBy("book_name")
.groupBy("chapter_nr")
.where(...)
.countOf()

编辑getWordDao returns 来自 class Word

@DatabaseTable(tableName = "content")
public class Word { ... }

returns 828 rows (which is the count of verse numbers)

这似乎是 QueryBuilder.countOf() 机制的限制。它期望单个值,并且不理解向计数查询添加 GROUP BY。你可以看出它不是因为那个方法 returns 一个单一的 long.

如果您想提取每个组的计数,您似乎需要执行 raw query check out the docs