Greendao 非重复计数查询

Greendao Distinct count query

所以我一直在努力让这个查询与 GreenDao 一起工作,我的问题是查询的开始,它(使用 rawquery)在 where 子句之后开始。

甚至可以使用 GreenDao 执行此查询,还是我必须使用标准 SQL 不使用 GreenDao 访问数据库的查询?

select count (distinct VISIBLE_PAGE_ID) from HOME_ITEM2 where IS_VISIBLE=1 and IS_ACTIVE = 1

所以我只用 SQL 就可以做到这一点,不知道是否有任何 BuildIn 方法可以做同样的事情:

  String query = "SELECT COUNT (DISTINCT "
                                    + HomeItem2Dao.Properties.VisiblePageId.columnName+
                                    ") from "
                                    + HomeItem2Dao.TABLENAME
                                    + " where "
                                    + HomeItem2Dao.Properties.IsVisible.columnName + " = 1 and "
                                    + HomeItem2Dao.Properties.IsActive.columnName + " = 1";
                            Integer count = 0;

                            Cursor cursor =
                                    MainApplication.getInstance().getDaoSession().getDatabase().rawQuery(
                                            query, null
                                    );

                            if(cursor.moveToFirst()){
                                count = cursor.getInt(0);
                            }
                            cursor.close();

实际上GreenDao中有CountQuery。看看这些链接: http://greenrobot.org/files/greendao/javadoc/2.1/de/greenrobot/dao/query/CountQuery.html

http://greendao-orm.com/2012/06/08/greendao-1-2-release/

希望对您有所帮助。

您可以使用 GreenDao 的 CountQuery class 来执行 count(*) 次查询。在使用 QueryBuilder 时使用 buildCount() 方法而不是 build() 方法。示例如下。

HomeItem2 homeItem2Dao = ((Application) context.getApplicationContext())
    .getDaoSession().getHomeItem2Dao();
QueryBuilder<HomeItem2> queryBuilder = 
    homeItem2Dao.queryBuilder().where(
        HomeItem2Dao.Properties.IsVisible.eq(true), 
        HomeItem2Dao.Properties.IsActive.eq(true));
return queryBuilder.buildCount().count();

我创建了一个 pull request 库,其中添加了一个函数来构建具有不同列表达式的计数查询。