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。
我有一个 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。