如何为CursorLoader定义GROUP BY
查询?
CursorLoader
Context
的两个构造函数可以选择一个Context
或Uri
,projection
,selection
,selectionArgs
, sortOrder
和groupBy
。
但没有{{1}}。
(我正在使用Android 2.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
也无法公开此类功能。
所以对我自己的问题的明显答案是: 你不能!