10

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

CursorLoader我看到的 a 的两个构造函数采用 singleContext或 a Context, Uri, projection, selection, selectionArgsand sortOrder

但是没有groupBy

(我正在使用 Android 2.3 设备的支持包)

4

3 回答 3

25

并不真地...

您可以为特定的 GROUP BY 子句定义特定的 URI。

例如,如果您有一个可能按性别分组的表 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;
   }
}

事实上,您可以将任何类型的参数传递给您的查询

Obs.:使用 UriMatcher 将 uri 与您的查询实现相匹配。

于 2012-07-11T04:23:44.620 回答
7

您可以使用选择参数添加 Group by

new CursorLoader(context,URI,
                        projection,
                                selection+") GROUP BY (coloum_name",
                        null,null);
于 2015-10-27T12:05:12.433 回答
4

显然(这有点尴尬)文档中的第一行清楚地说明CursorLoaderContentResolver要检索Cursor. 虽然ContentResolver没有公开任何方法GROUP BY,因此也没有办法CursorLoader公开这样的功能。

所以对我自己的问题的明显答案是:你不能!

于 2012-06-09T05:40:57.040 回答