запрос суммы поставщика контента для Android - PullRequest
6 голосов
/ 02 мая 2011

Можно ли использовать getContentResolver().query(), когда я хочу sum(column)?

ИЛИ

Нужно ли делать необработанный запрос для обработки БД?

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

При предоставлении массива столбцов для ContentResolver.query, оберните имя столбца функцией sum()

String[] columns = new String[] { "sum(" + columnName + ")" };

Cursor cursor = getContentResolver().query(
    content_uri,
    columns,
    selection,
    selectionArgs,
    sort
);

cursor.moveToFirst();

int columnSum = cursor.getInt(0);
4 голосов
/ 03 мая 2011

ОК, кажется, что невозможно getContentResolver().query().Я должен был получить соединение БД и сделать rawQuery.

 ContentProviderClient client =  getContentResolver().acquireContentProviderClient(AUTHORITY);
 SQLiteDatabase dbHandle= ((MyContentProvider)client.getLocalContentProvider()).getDbHandle();
 Cursor cursor = dbHandle.rawQuery("SELECT sum("+COLUM_NNAME+") FROM "+TABLE_NAME +" WHERE "+WHERE_CLAUSE , null);
 cursor.moveToFirst();
 int cnt =  cursor.getInt(0);
 cursor.close();
 cursor.deactivate();
 client.release();
3 голосов
/ 18 марта 2016

ПРИНЯТЫЙ ОТВЕТ НЕПРАВИЛЬНЫЙ

В КОНТЕНТПРОВИДЕРЕ ВОЗМОЖНО КАК

 String[] columns = new String[] { "sum(" + columnName + ")" };

    Cursor cursor = getContentResolver().query(
        content_uri,
        columns,
        selection,
        selectionArgs,
        sort
    );
int columnSum = cursor.getInt(0);

Единственная ошибка, которую сделал Том, он забыл сделать:

cursor.moveToFirst();
0 голосов
/ 02 мая 2011

Вы можете использовать метод simpleQueryForLong () '.

...