Страница 1 из 1

получение MAX из content provider

Добавлено: 09 авг 2013, 01:47
Idol
Необходимо получить максимум из определенной колонки таблицы. Существует метод типа:

Код: Выделить всё

final String[] PROJECTION = new String[] { "MAX(" + drillsetColumns.DRILLSET_ORDER_N + ") as max_orderN" };
		String arg = Long.toString(drill_id);
		Cursor cursor = getContentResolver().query(drillsetColumns.CONTENT_URI, PROJECTION,
				drillsetColumns.ID_DRILL + "=?", new String[] { arg }, null);
Однако, хотелось бы все это запихнуть внутрь К.провайдера и вызывать через определенный Uri, как хранимую процедуру.
Если у кого есть опыт или ссылка на подобную схему (не обязательно нахождение MAX) поделитесь, пожалуйста.

Re: получение MAX из content provider

Добавлено: 04 сен 2013, 12:05
Foenix
ну давай разбираться, только я не совсем поняла что требуется? У тебя в примере и есть пример вызова метода к.п. Соответственно в нем все и обрабатывается по drillsetColumns.CONTENT_URI
В том-то и дело, что с к.п. все вот так вот громоздко вызвается, можно сделать чуть понятнее, но можно в этом разобраться и к этому привыкнуть..
С моей т.з. код получается труднее читаемым.. но что поделать..

Re: получение MAX из content provider

Добавлено: 05 сен 2013, 00:23
Idol
Foenix,
Спасибо за твое участие.

В идеале все детали запроса правильнее было бы запихнуть внутрь КП. К примеру, оператор МАХ не должен фигурировать в коде программы. Т.е. обращение идет по uri типа .../max_price и все. Теоретически это возможно, но практической реализации мне найти в инете не удалось (у самого времени нет пока). Я надеюсь, что в куче созданых тобой методов есть что-либо подобное.

Re: получение MAX из content provider

Добавлено: 05 сен 2013, 00:29
Foenix
кто тебе такое сказал "не должен" и так далее?
именно так и делается, посмотри примеры, туториалы на серьезных источниках.

Мне самой это не особо нравится, но я прихожу к выводу, что андроид вообще не приспособен хоть к сколь серьезной работе с базами данных, т.к. он не для этого вообще предназначен, так.. просмотреть 1 табличку и какой-то простенький запрос обработать, нагородя кучу кода при этом, и все.
Сказать по-честному, я делаю простыми запросами типа rawquery , потому как мне так понятней и нет никаких этих кодов как в твоем примере, выглядящих как шифровка. Но это, я уверена, не аутентичненько.

Re: получение MAX из content provider

Добавлено: 05 сен 2013, 00:33
Foenix
и я в другой теме говорила, что да, теперь в коде программы "фигурирует" не только макс, но и куча другого кода, которая не осоставляет основу логичного алгоритма, с к.п. появляется повторяющиеся блоки кода, совершенно как бы не уместного там. Поэтому тут логично сделать класс надстройку, в который все это спрятать. Мне нравится больше, когда вызов идет лишь 1 строка с наименованеием какого-нибудь логичного метода, возвращающего или курсор или где нужно единичногго значения того же макса.

Re: получение MAX из content provider

Добавлено: 06 сен 2013, 01:26
Idol
В принципе во всем с тобой согласен.
Проясни одну вещь, ты используешь rawquery с КП? Если да, то скинь какой-нибудь простой пример, пожалуйста.

Re: получение MAX из content provider

Добавлено: 06 сен 2013, 18:18
Foenix
вечером постараюсь сделать.

Re: получение MAX из content provider

Добавлено: 06 сен 2013, 23:15
Foenix
cSQL - Это запрос.

cursor = getActivity().getContentResolver().query(uri, null, cSQL, null, null);

ну и там в провайдере дело в шляпе
return mDb.rawQuery(cSQL, null);