GROUP BY与CursorLoader

时间:2012-05-14 09:43:44

标签: android android-cursorloader

如何为CursorLoader定义GROUP BY查询?

CursorLoader Context的两个构造函数可以选择一个ContextUriprojectionselectionselectionArgssortOrdergroupBy

但没有{{1}}。

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

3 个答案:

答案 0 :(得分:24)

不是......

您可以为特定的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与您的查询实现相匹配。

答案 1 :(得分:6)

您可以使用选择参数

添加分组依据
new CursorLoader(context,URI,
                        projection,
                                selection+") GROUP BY (coloum_name",
                        null,null);

答案 2 :(得分:3)

显然(这有点令人尴尬)documentation中的第一行明确指出CursorLoader查询ContentResolver以检索Cursor。虽然ContentResolver没有向GROUP BY公开任何方法,但CursorLoader也无法公开此类功能。

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