问题
How do I define a GROUP BY
query for my CursorLoader?
The two constructors for a CursorLoader
I see take either a single Context
or a Context
, Uri
, projection
, selection
, selectionArgs
and sortOrder
.
But no groupBy
.
(I'm using the support package for a Android 2.3 device)
回答1:
Not really...
You can define a specific URI to your specific GROUP BY clause.
For example, if you have a table mPersonTable, possibly grouped by gender, you can define the following URIs:
PERSON
PERSON/#
PERSON/GENDER
When querying, switch between your queries so you can add your group by parameter:
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;
}
}
In fact, you could pass any sort of parameters to your query
Obs.: Use a UriMatcher to match the uri with your query implementation.
回答2:
You can add Group by with selection parameter
new CursorLoader(context,URI,
projection,
selection+") GROUP BY (coloum_name",
null,null);
回答3:
Apparently (and this is a bit embarrassing) the very first line in the documentation clearly states that the CursorLoader
queries the ContentResolver
to retrieve the Cursor
. While the ContentResolver
doesn't expose any means to GROUP BY
there is, hence, no way the CursorLoader
could expose such functionality either.
So the apparent answer to my very own question is: You can't!
来源:https://stackoverflow.com/questions/10580883/group-by-with-cursorloader