GROUP BY与CursorLoader(GROUP BY with CursorLoader)

2019-07-29 09:15发布

如何定义一个GROUP BY查询我的CursorLoader?

的两个构造用于CursorLoader我看到采取一个单一的ContextContextUriprojectionselectionselectionArgssortOrder

但是,没有groupBy

(我使用的支持包用于Android 2.3的装置)

Answer 1:

并不是的...

您可以定义一个特定的URI您的具体GROUP BY子句。

例如,如果你有一个表mPersonTable,可能是由性别分组,您可以定义以下的URI:

PERSON
PERSON/#
PERSON/GENDER

查询时,您的查询之间切换,这样你就可以通过参数添加组:

public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
   String groupBy = null;
   switch (mUriMatcher.match(uri)) {
      case PERSON_ID:
         ...
         break;
      case PERSON_GENDER:
         groupBy = GENDER_COLUMN;
      case PERSON:
        SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
        builder.setTables(mPersonTable);
        builder.setProjectionMap(mProjectionMap);
        return builder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder, limit);
      default:
         break;
   }
}

事实上,你可以通过任何类型的参数来查询

实验值:使用UriMatcher,以配合您的查询实现的URI。



Answer 2:

您可以通过选择参数添加组

new CursorLoader(context,URI,
                        projection,
                                selection+") GROUP BY (coloum_name",
                        null,null);


Answer 3:

显然,(这是一个有点尴尬)中第一行的文件中明确指出, CursorLoader查询ContentResolver检索Cursor 。 虽然ContentResolver不公开任何手段来GROUP BY存在,因此,没有办法CursorLoader既可以揭露这种功能。

因此,明显的答案我自己的问题是: 你不能!



文章来源: GROUP BY with CursorLoader