SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
-
Idol
- Сообщения: 55
- Зарегистрирован: 26 июн 2013, 04:33
Сообщение
Idol » 09 авг 2013, 01:47
Необходимо получить максимум из определенной колонки таблицы. Существует метод типа:
Код: Выделить всё
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) поделитесь, пожалуйста.
-
Foenix
- Сообщения: 4201
- Зарегистрирован: 20 окт 2012, 12:01
Сообщение
Foenix » 04 сен 2013, 12:05
ну давай разбираться, только я не совсем поняла что требуется? У тебя в примере и есть пример вызова метода к.п. Соответственно в нем все и обрабатывается по drillsetColumns.CONTENT_URI
В том-то и дело, что с к.п. все вот так вот громоздко вызвается, можно сделать чуть понятнее, но можно в этом разобраться и к этому привыкнуть..
С моей т.з. код получается труднее читаемым.. но что поделать..
-
Idol
- Сообщения: 55
- Зарегистрирован: 26 июн 2013, 04:33
Сообщение
Idol » 05 сен 2013, 00:23
Foenix,
Спасибо за твое участие.
В идеале все детали запроса правильнее было бы запихнуть внутрь КП. К примеру, оператор МАХ не должен фигурировать в коде программы. Т.е. обращение идет по uri типа .../max_price и все. Теоретически это возможно, но практической реализации мне найти в инете не удалось (у самого времени нет пока). Я надеюсь, что в куче созданых тобой методов есть что-либо подобное.
-
Foenix
- Сообщения: 4201
- Зарегистрирован: 20 окт 2012, 12:01
Сообщение
Foenix » 05 сен 2013, 00:29
кто тебе такое сказал "не должен" и так далее?
именно так и делается, посмотри примеры, туториалы на серьезных источниках.
Мне самой это не особо нравится, но я прихожу к выводу, что андроид вообще не приспособен хоть к сколь серьезной работе с базами данных, т.к. он не для этого вообще предназначен, так.. просмотреть 1 табличку и какой-то простенький запрос обработать, нагородя кучу кода при этом, и все.
Сказать по-честному, я делаю простыми запросами типа rawquery , потому как мне так понятней и нет никаких этих кодов как в твоем примере, выглядящих как шифровка. Но это, я уверена, не аутентичненько.
-
Foenix
- Сообщения: 4201
- Зарегистрирован: 20 окт 2012, 12:01
Сообщение
Foenix » 05 сен 2013, 00:33
и я в другой теме говорила, что да, теперь в коде программы "фигурирует" не только макс, но и куча другого кода, которая не осоставляет основу логичного алгоритма, с к.п. появляется повторяющиеся блоки кода, совершенно как бы не уместного там. Поэтому тут логично сделать класс надстройку, в который все это спрятать. Мне нравится больше, когда вызов идет лишь 1 строка с наименованеием какого-нибудь логичного метода, возвращающего или курсор или где нужно единичногго значения того же макса.
-
Idol
- Сообщения: 55
- Зарегистрирован: 26 июн 2013, 04:33
Сообщение
Idol » 06 сен 2013, 01:26
В принципе во всем с тобой согласен.
Проясни одну вещь, ты используешь rawquery с КП? Если да, то скинь какой-нибудь простой пример, пожалуйста.
-
Foenix
- Сообщения: 4201
- Зарегистрирован: 20 окт 2012, 12:01
Сообщение
Foenix » 06 сен 2013, 23:15
cSQL - Это запрос.
cursor = getActivity().getContentResolver().query(uri, null, cSQL, null, null);
ну и там в провайдере дело в шляпе
return mDb.rawQuery(cSQL, null);