#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()‘-Метод.