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

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

22.07.2014, 11:02. Просмотров 1623. Ответов 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
911 / 559 / 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
2777 / 2206 / 746
Регистрация: 12.05.2014
Сообщений: 7,737
Завершенные тесты: 1
22.07.2014, 12:53 4
я sql не знаю, но мне кажется очевидным заменить OR (или) на AND (и)
0
Rube
911 / 559 / 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
911 / 559 / 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
911 / 559 / 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
911 / 559 / 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

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

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

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


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

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

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