Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
1

Приложение "Рецепты", как хранить данные?

22.07.2014, 11:02. Просмотров 1654. Ответов 11
Метки нет (Все метки)

Есть такой вордовский файл с рецептами.
Кликните здесь для просмотра всего текста
Голубцы с картофелем
- картофель - 4-5 шт.
- капуста - 1 кочан или 800 г
- яйцо - 1 шт.
- лук репчатый - 2 шт.
- масло сливочное - 3 ст.л.
- соус сметанный с томатом, соль - по вкусу

Из кочана капусты вырезать кочерыжку, отварить кочан до полу готовности в подсоленной воде.
Сваренный кочан капусты разобрать на листья, слегка отбить черешки. Приготовить фарш.
...

Картофель, сваренный в молоке

- картофель - 3-4 шт.
- молоко - 1.5 стакана
- лук репчатый - 1/2 луковицы
- мука - 1 ст.л.
- масло сливочное - 1 ст.л.

Картофель очистить, нарезать дольками или кубиками и варить 10 мин в воде,
после чего воду слить, залить картофель горячим молоком, варить до готовности.

Пицца с говядиной

- мука - 1 стакан
- дрожжи - 25г
- масло сливочное - 2-3 ст.л.
- сахар - 2 ч.л.
- яйцо - 2 шт.
- молоко - 1/2 стакана
- сладкий перец - 1 стручок
- майонез - 4 ст.л.

Приготовить дрожжевое тесто, раскатать и выложить на смазанный маслом противень.
Отварную говядину нарезать соломкой и выложить на тесто.
...


Хочу сделать приложение "Рецепты", вот думаю в чем лучше хранить данные. Пока реализовал в БД, но думаю про Json, может там проще?
Загвоздка в том, что нужно реализовать поиск рецептов по продуктам: например выбираем "Картофель", выйдет 1 и 2 рецепты, выберем "Яйцо" - выйдет 1 и 3, а если "Яйцо" + "Капуста", то 1.

Как сделал БД: т.Продукты (id, Продукт), т.Рецепты (id, Название, Продукты, Описание) // кол-во продуктов еще не придумал как хранить
В т.Рецепты поле Продукты сделал так: |1|5|6|8|, где цифры - id продукта из т.Продукты.
SQL запроса: "SELECT Название FROM Рецепты WHERE Продукты like '*|3|*' AND Продукты like '*|4|*' AND Продукты like '*|6|*'"
С Json еще не работал, но вижу там есть вроде все необходимое, так ли это?
И поиск по такому алгоритму там возможен?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 11:02
Ответы с готовыми решениями:

Как "подружить" внешнее устройство и приложение
Добрый вечер, друзья! Помогите, суть вопроса ниже: Представим что: Есть устройство,...

Сообщение "приложение остановлено" постоянно, даже когда приложение вообще не запущено
Собственно ,сабж в топике

Как сделать приложение полноэкранным и убрать вспомогательные кнопки "назад, главный экран."
Здравствуйте, Можно ли сделать приложение на весь экран, и убрать от туда вспомогательные кнопки...

Как создать "невидимое" приложение
Здравствуйте. Недавно увидел в Play Market приложение, которое было невозможно открыть. Т.е. в...

Возможно ли программно позвонить по номеру? НЕ через Intent, а так, как это делает приложение "Телефон"
... Добавлено через 1 минуту Ну то есть нажал кнопку - соединился - слушаешь из динамика,...

11
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
22.07.2014, 11:23 2
Rube, 3 таблицы. Продукты, рецепты, рецепт-продукт. Получится many-to-many
2
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
22.07.2014, 12:47  [ТС] 3
YuraAAA, сделал третью таблицу Рецепт_Продукт с полями idP, idR, Количество.
Но не могу создать запрос.
Этот выдает все рецепты, где есть 4 или 6 (а надо где встречаются 4 и 6)
SQL
1
2
3
SELECT Название FROM Рецепты INNER JOIN Рецепт_Продукт ON Рецепты.id = Рецепт_Продукт.idR
WHERE Рецепт_Продукт.idP = 4 OR Рецепт_Продукт.idP = 6
GROUP BY Название;
WHERE Рецепт_Продукт.idP IN(4,6) тоже самое.
0
Pablito
2840 / 2258 / 762
Регистрация: 12.05.2014
Сообщений: 7,896
Завершенные тесты: 1
22.07.2014, 12:53 4
я sql не знаю, но мне кажется очевидным заменить OR (или) на AND (и)
0
22.07.2014, 12:53
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
22.07.2014, 13:55  [ТС] 5
Паблито, пробовал, тогда вообще записей не выводит.

Добавлено через 57 минут
Кое как додумался:
SQL
1
2
3
4
5
6
SELECT Рецепты.Название
FROM Рецепты INNER JOIN (Продукты INNER JOIN Рецепт_Продукт ON Продукты.id = Рецепт_Продукт.idP) ON 
Рецепты.ID = Рецепт_Продукт.idR
WHERE Продукты.ID=2 OR Продукты.ID=17
GROUP BY Рецепты.Название
HAVING COUNT(Рецепты.Название)=2;
А все же насчет Json кто-нить расскажет? Для общего развития так сказать.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
22.07.2014, 15:44 6
Rube, можно и в JSON. Но как тогда Вы поиск реализуете-то??)
0
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
23.07.2014, 07:57  [ТС] 7
YuraAAA, ну это и был мой главный вопрос, надеялся, что есть какие методы, типа найти "содержит" и потом вытащить родителя, как то так. В рунете мало примеров про Json, а про поиск вообще не нашел.
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
26.07.2014, 22:31 8
Rube, если вы планируете хоть как-то расширять свою программу (и базу данных), то JSON вам будет необходим для обмена данным между БД в приложении и БД на сервере, например. А данные хранить надо в папке assets в своей базе данных. Правда, заморочек с ней немало, это не обычно виндовое приложение с СУБД.
1
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
27.07.2014, 11:40  [ТС] 9
Что JSON для обмена данными это я знаю, функционала с сервером не будет, незачем. Данные в проекте делаю так: в assets кладу БД, при установке приложение копирует ее в databases, потом думаю надо удалять файл из assets. Если кто знает более совершенный способ, прошу написать.
А пока занимаюсь форматированием самого файла с рецептами (Word), макросом выборки названий, продуктов, рецептов и переноса их в БД (Access). Это жесть, думал быстро сделаю).
Рецепты для мультиварки)
1
Pljus
5 / 5 / 1
Регистрация: 15.04.2010
Сообщений: 45
27.07.2014, 21:57 10
Цитата Сообщение от Rube Посмотреть сообщение
переноса их в БД (Access)
Используйте БД sqlite
1
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
28.07.2014, 00:53 11
Rube, мыслите правильно. Я пока новичок в БД для Андроида, но понимаю работу с ними так. В APK хранится assets (или res/raw по вкусу, но эта папка обычно для других бинарников). После установки приложения на смартфон программа должна уметь копировать файл из assets в другую папку. После этого база там будет храниться постоянно, и копировать её повторно обычно нет необходимости (разве что если появится новая версия приложения с другой структурой базы). Если происходит синхронизация данных с сервера в вашу локальную базу (например, если бы вы скачивали с сервера новые рецепты), то используются JSON'ы. Причём, я пока научился тому, чтобы они скачивались каждый раз при открытии приложения. Может быть, есть и другие способы.
База данных в assets могла бы быть, в принципе, и пустой, а заполняться уже при открытии приложения, но в этом случае при отсутствии Интернета пользователь мог бы не увидеть данных, поэтому обычно в APK кладут уже базу с заполненными данными.
Перенести базу обратно в assets, а равно удалить assets нельзя, т.к. это привело бы к нарушению в целостности самого APK (ведь база "лежит" внутри этого файла).
1
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
28.07.2014, 12:51  [ТС] 12
Цитата Сообщение от CoolMind Посмотреть сообщение
т.к. это привело бы к нарушению в целостности самого APK
А точно, как то я упустил этот момент
Цитата Сообщение от Pljus Посмотреть сообщение
Используйте БД sqlite
Что значит используйте? Она у меня и так используется в приложении, про Access я имел ввиду на ББ предварительные работы провести.
0
28.07.2014, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 12:51

Кнопка "Стереть данные", как от нее защититься?
В настройках приложения есть кнопка "Стереть данные", она удаляет все данные (в том числе и sql)...

Как сохранить данные при свертывании аппаратной кнопкой "Back"?
Здравствуйте. Подскажите пожалуйста, как сохранить данные при нажатии аппаратной кнопки back в...

Как "расшифровать" данные файлы?
Я взял готовые спрайты с одной игры! Я же не знаю, как их открыть/изменить Так-же они помечены,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru