запрос суммы поставщика контента Android

#android #android-contentprovider

#Android #android-contentprovider

Вопрос:

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

или

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

Ответ №1:

При предоставлении массива столбцов для 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);
  

Комментарии:

1. это не работает, недопустимая сумма столбца (продолжительность) E / DatabaseUtils(2917): в android.database.sqlite. SQLiteQueryBuilder.computeProjection (SQLiteQueryBuilder.java:523)

Ответ №2:

Хорошо, кажется, что его использование невозможно 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:

ПРИНЯТЫЙ ОТВЕТ НЕВЕРЕН

ЭТО ВОЗМОЖНО В CONTENTPROVIDER КАК

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

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

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

 cursor.moveToFirst();
  

Комментарии:

1. Этот Том всегда совершает ошибки; P

Ответ №4:

Вы могли бы использовать ‘simpleQueryForLong()‘-Метод.