Как создать базу данных для андроид приложения
В первой части мы изучили возможности SQLite. Теперь нужно научиться подключать базу данных в приложении на Android.
SQLite зарекомендовала себя в качестве чрезвычайно надёжной системы баз данных, которая используется во многих бытовых электронных устройствах и программах, включая некоторые MP3-проигрыватели, iPhone, iPod Touch, Mozilla Firefox и др.
С помощью SQLite вы можете создавать для своего приложения независимые реляционные базы данных. Android хранит базы данных в каталоге /data/data/<имя_вашего_пакета>/databases на эмуляторе, на устройстве путь может отличаться. По умолчанию все базы данных закрытые, доступ к ним могут получить только те приложения, которые их создали.
Каждая база данных состоит из двух файлов. Имя первого файла базы данных соответствует имени базы данных. Это основной файл баз данных SQLite, в нём хранятся все данные. Вы будете создавать его программно. Второй файл — файл журнала. Его имя состоит из имени базы данных и суффикса "-journal". В файле журнала хранится информация обо всех изменениях, внесенных в базу данных. Если в работе с данными возникнет проблема, Android использует данные журнала для отмены (или отката) последних изменений. Вы с ним не будете взаимодействовать, но если вы будете просматривать внутренности своего устройства, то будете знать, зачем этот файл там присутствует.
Интерфейс
Для начала создадим интерфейс программы. Для первой активности MainActivity выберем шаблон Basic Activity. Сразу же создадим вторую активность EditorActivity из шаблона Empty Activity.
В первой активности есть кнопка Floating Action Button, через которую будем попадать на вторую активность.
Вторая активность предназначена для добавления новых гостей, которые поселяются в наш отель "Кошкин дом". Настроим его.
Экран состоит из нескольких текстовых полей и одного выпадающего списка для выбора пола гостя.
Инициализируем текстовые поля и выпадающий список.
Добавим несколько строковых ресурсов.
Подписываем контракт
Теперь можно заняться интеграцией базы данных в приложение.
При работе с базой данных принято создавать новый пакет data внутри основного пакета. Щёлкаем правой кнопкой мыши по имени пакета, выбираем New | Package и вводим новое имя.
В последних рекомендациях Гугла рекомендуется создавать класс-контракт. Будем придерживаться этого правила. Мы как бы подписываем контракт на работу с базой данных и предоставляем все нужные данные.
Внутри созданного пакета создаём новый класс HotelContract. Класс-контракт является контейнером для базы данных и может содержать несколько внутренних классов, которые представляют отдельные таблицы (не забывайте, что база данных может содержать несколько таблиц). Внутри класса создаём внутренний класс. В нашем случае будет один класс для таблицы guests.
Нам следует задать схему таблицы и константы для столбцов для удобства. Класс будет выглядеть так.
В классе используется реализация интерфейса BaseColumn:
Что это нам даёт? В большинстве случаев работа с базой данных происходит через специальные объекты Cursor, которые требуют наличия в таблице колонки с именем _id. Вы можете создать столбец вручную в коде, а можно положиться на BaseColumn, который создаст столбец с нужным именем автоматически. Дело ваше. Если вы не будете работать с курсорами, то можете использовать и стандартное наименование id или вообще не использовать данный столбец, но не советую так поступать, чтобы не вырабатывать вредных привычек.
После создания класса мы можем изменить код в EditorActivity в том месте, где происходит выбор пола гостя через выпадающий список.
SQLiteOpenHelper
Следующий шаг - создание класса в пакете data, который наследуется от специального класса SQLiteOpenHelper и непосредственно работает с базой данных. В классе создаются константы для удобной работы. Также реализуются методы onCreate() и onUpgrade().
Созданный класс будет работать с базой данных - добавлять, выбирать, удалять записи и прочие операции.
Напомню, как выглядит схема нашей таблицы.
Щёлкаем правой кнопкой мыши на имени пакета в левой части студии и выбираем в меню New | Java Class и в диалоговом окне выбираем имя для нового класса, например, HotelDbHelper. Слово Helper обычно используют, чтобы показать, что класс является обёрткой (вспомогательным классом) какого-то абстрактного класса. Впрочем, вы можете придумать более замысловатое название, например, ILoveNewYork или CatsForever. Спустя год, когда вы вернётесь к своему примеру, это будет так увлекательно вспоминать, для чего был создан класс с таким красивым именем.
У нас появится заготовка. Наследуемся от SQLiteOpenHelper. Студия предложит создать два обязательных метода onCreate() и onUpgrade(), о которых поговорим позже.
После добавления методов студия по-прежнему ругается. Теперь ему подавай конструкторы. Получится такой код.:
Класс HotelDbHelper.
Третий параметр null в суперклассе используется для работы с курсорами. Сейчас их не используем, поэтому оставим в покое.
Как вы уже догадались, константа DATABASE_NAME отвечает за имя файла, в котором будет храниться база данных приложения. Можно придумать любое имя и обойтись без расширения. Но мне так привычнее.
Вторая константа DATABASE_VERSION требует дополнительных объяснений. Она отвечает за номер версии базы. Принцип её работы схож с номером версий самого приложения. Когда мы видим, что вышла новая версия Chrome 33, то понимаем, что пора обновляться. Аналогично поступает и само приложение, когда замечает, что номер версии базы стал другим. Как только программа заметила обновление номера базы, она запускает метод onUpgrade(), который у нас сформировался автоматически. В этом методе необходимо разместить код, который должен сработать при обновлении базы.
Метод onCreate() вопросов не вызывает - здесь создаётся сама база данных с необходимыми данными для работы.
Метод вызывается, если в устройстве нет базы данных и наш класс должен создать его. Как мы помним, у метода есть параметр db, который относится к классу SQLiteDatabase. У класса есть специальный метод execSQL(), которому нужно передать запрос (SQL-скрипт) для создания таблицы. Для создания таблицы в SQL используется команда CREATE TABLE . . Для удобства вынесем команду в отдельную строку. Аналогично поступим с командой DROP TABLE. Так как строка очень длинная и состоит из множества строковых переменных, которые нужно соединить в одну цепочку, то поступают следующим образом. Создаём ещё одну строковую константу для формирования скрипта и передадим её в метод.
Основная сложность - не пропустить пробелы в запросе. Очень часто пропущенный пробел становится источником проблем и ваше приложение не может создать таблицу. Можете сначала написать сам скрипт создания таблицы, а уже потом заменять отдельные слова константами. Идентификатор _id всегда должен использовать INTEGER PRIMARY KEY AUTOINCREMENT, остальные колонки на ваше усмотрение.
Теперь нужно объяснить, зачем нужен этот метод onUpgrade(). Представьте ситуацию, что вы первоначально создали в базе таблицу, в которую заносятся имена котов и их электронные адреса и телефоны (продвинутые кошаки). Вроде всё замечательно. Если нужно поздравить усатых-полосатых с Международным днём кошек, который отмечается 1 марта, то проблем нет никаких. У вас есть список имён, по которому вы можете пройтись и лично написать каждому письмо. Пользователи, скачавшие ваше приложение, с удовольствием заполняют базу данных и дружно пишут письма мелким почерком. И вдруг до вас дошло, что совершили непростительную ошибку. Вы забыли добавить в базу данных даты рождения котов. А значит их никто не поздравит и не погладит (((.
Вы исправляете досадное упущение и выкладываете новую версию программы в открытый доступ. Новые пользователи, которые установят программу первый раз, радуются жизни - у них есть все необходимые данные для работы. Но что делать тем, кто уже работает со старой программой? Обновившись, они увидят дополнительное текстовое поле для ввода даты рождения, но в старой базе нет колонки для хранения новых данных. И ваша программа завершится с ошибкой. Полностью удалять и устанавливать новую версию программы тоже не выход - тогда пропадут старые данные, что тоже не желательно. Для таких случаев вы пишете код в методе onUpgrade(), чтобы при обновлении поменялась структура базы данных у старых пользователей. Мы позже попробуем смоделировать эту ситуацию.
Итак, метод onUpgrade() вызывается при несовпадении версий. Часто в этом методе просто удаляют существующую таблицу и заменяют её на новую. Это самое простое и практичное решение. Впрочем, на первых порах, вам вряд ли придётся заниматься подобными делами, поэтому метод можно оставить даже пустым.
Когда ваше приложение будет готово, то в папке data/data/имя_пакета/databases появится файл hotel.db (позже я вам покажу). Этот файл и будет вашей базой данных, в которой будет находиться созданная вами таблица. На данный момент в студии нет готового плагина для просмотра таблиц (в Eclipse есть), но вроде уже видел плагин от сторонних разработчиков. А пока вам придётся скачивать из устройства файл базы данных и просматривать его на компьютере специальными программами, работающими с SQLite на локальном компьютере.
Работаем с записями базы данных
Чтобы проверить работоспособность базы данных, в главной активности поместим вспомогательный метод displayDatabaseInfo() для отображения информации.
Массив projection - это список столбцов, которые нас интересуют. В SQL-запросе мы их указываем в операторе SELECT:
В методе query() третий и четвёртый параметр определяют условие WHERE. Возьмём случай с выражением:
В коде такое выражение выглядело бы так.
Как видим, в знак вопроса подставляется нужное значение.
Последний аргумент отвечает за сортировку по возрастанию или убыванию. Например, по возрасту.
Чтение данных
Считывать данные также можно двумя способами. В любом случае результат возвращается в виде объекта Cursor. Не путайте его с курсором мыши, который бегает у вас на экране.
Первый способ. Метод query()
Извлечение данных происходит через метод query(). Данные хранятся в наборе строк, которые можно представить в виде таблицы. Из этой таблицы вы уже можете извлечь конкретное значение.
У метода query() множество параметров. В первом параметре укажите имя таблицы, во втором - массив имён колонок, далее идут дополнительные условия. Пока везде оставим null. В нашем примере мы добавили одну запись и извлечь её просто.
Второй способ. Метод rawQuery()
Второй способ использует сырой (raw) SQL-запрос. Сначала формируется строка запроса и отдаётся методу rawQuery().
Запустите проект. При запуске создаётся база данных. Убедиться в этом можно, если запустить Android Device Monitor. Выберите вкладку File Explorer и найдите своё приложение (на эмуляторе). Вы увидите, что появилась папка data/data/имя_пакета/databases с файлом hotel.db. Метод getReadableDatabase создаёт или открывает базу данных.
Сейчас мы увидим, что пока у нас 0 гостей.
Небольшое предупреждение. При работе с базой данных мы обращаемся к файлу. Если база данных очень большая, то запросы не будут мгновенными. Операции с файлами являются медленными, поэтому следует использовать многопоточность. Для наших примеров это не страшно, поэтому мы пока не будем усложнять код.
Вставка данных для проверки
Рассмотрим, как вставлять новые данные. Добавим в меню главной активности пункт "Вставить данные". Для вставки данных применяется метод ContentValues.put(). В методе указываются ключ и значение. В качестве ключа выступает имя столбца таблицы, а его значением будет нужная информация о госте. Так как идентификатор будет вставляться автоматически, то его не используем. После того, как вы заполните все столбцы таблицы, вызывайте метод insert(), который и разместит данные в базе.
Напишем вспомогательный метод.
Вызовем метод в обработчике нажатия пункта меню.
Сразу после вставки вызываем метод displayDatabaseInfo(), чтобы увидеть результат. Можно нажимать несколько раз. Так как данные жёстко заданы в коде, то увидим одинаковые данные, кроме увеличивающего значения идентификатора.
Вставка данных. Общая информация
Теперь разберём подробнее, как делать вставки.
Первый способ. ContentValues
Для вставки сначала подготавливаются данные с помощью класса ContentValues. Вы указываете имя колонки таблицы и значение для неё, т.е. работает по принципу "ключ-значение". Когда подготовите все данные во все столбцы, то вызывайте метод insert(), который сразу раскидает данные по столбцам.
Способ очень удобен, требует мало кода и легко читаем. Вы создаёте экземпляр класса, а затем с помощью метода put() записываете в нужную колонку нужные данные. После чего вызывается метод insert(), который помещает подготовленные данные в таблицу.
У метода insert() три аргумента. В первом указывается имя таблицы, в которую будут добавляться записи. В третьем указывается объект ContentValues, созданный ранее. Второй аргумент используется для указания колонки. SQL не позволяет вставлять пустую запись, и если будет использоваться пустой ContentValue, то укажите во втором аргументе null во избежание ошибки.
Второй способ. SQL-запрос
Существует также другой способ вставки через метод execSQL(), когда подготавливается нужная строка и запускается скрипт. Этот способ возможно понравится PHP-кодерам, которые привыкли к такому синтаксису.
Научившись вставлять данные, можно заняться второй активностью, которая и предназначена для этих целей.
Наполняем базу данных
Создадим вспомогательный метод для вставки записи в базу данных. Для этого считываем данные, которые вводятся в текстовые поля, а далее по предыдущему учебному примеру.
Метод вызывается в меню для значка с галочкой, которая выводится на панели действия активности.
Запускаем проект и проверяем работу кода.
Изменение данных
Обновление не реализовано в программе, проделайте это самостоятельно.
Если запись уже существует, но вам нужно изменить какое-то значение, то вместо insert() используйте метод update(). В остальном принцип тот же. Предположим, что повторном осмотре котёнка выяснилось, что это кот, а не кошка. Если вы уже назвали котёнка Муркой, то логично назвать его теперь Мурзиком. Вызываем метод put(), а затем обновляем запись в базе данных.
Первый параметр метода update() содержит имя таблицы. Второй параметр указывает, какие значения должны использоваться для обновления. Третий параметр задает условия отбора обновляемых записей (WHERE). В приведенном примере "NAME = ?" означает, что столбец NAME должен быть равен некоторому значению. Символ ? обозначает значение столбца, которое определяется содержимым последнего параметра. Если в двух последних параметрах метода передаётся значение null, будут обновлены ВСЕ записи в таблице.
Возможны и сложные условия.
Если столбец не является строкой, то его нужно преобразовать в строку, чтобы использовать в качестве условий.
Будьте осторожны с обновлениями. Если в последних двух параметрах передать значение null, то будут обновлены все записи в таблице, так как в запросе нет условий.
Удаление данных
Также не реализовано. Проделайте самостоятельно.
Метод delete() класса SQLiteDatabase работает по тому же принципу, как и метод update(). Он имеет следующую форму:
Внедрение опасного кода
При работе с базой данной надо следить за безопасностью данных. Опытный пользователь может удалить базу. На своём устройстве он делать этого может и не будет, но на устройстве жертвы вполне.
Простой вариант атаки. Допустим у нас есть поле для ввода идентификатора, чтобы узнать информацию о госте. Нормальный пользователь введёт число "3" для поиска третьего гостя. В коде это будет следующим образом.
Тогда идентификатор будет _ID == 2;.
Хакер может ввести следующую строку в текстовое поле:
В коде это превратится в следующее:
Таким образом вредитель внедрил нежелательный код, который удалит таблицу.
Если в нашем приложении больше 5 таблиц, то уже было бы не плохо использовать какой-нибудь инструмент для визуального проектирования архитектуры БД. Поскольку для меня это хобби, то и использую я абсолютно бесплатный инструмент под названием Oracle SQL Developer Data Modeler (скачать его можно тут).
Данная программа позволяет визуально рисовать таблицы, и строить взаимосвязи с ними. Многие ошибки проектирования архитектуры БД можно избежать при таком подходе проектирования (это я уже вам говорю как профессиональный программист БД). Выглядит это примерно так:
Спроектировав саму архитектуру, приступаем к более нудной части, заключающийся в созданий sql кода для создания таблиц. Для помощи в этом вопросе, я уже использую инструмент под названием SQLiteStudio (его в свою очередь можно скачать тут тут).
Данный инструмент является аналогом таких известных продуктов как SQL Naviagator, Toad etc. Но как следует из названия, заточен он под работу с SQLite. Он позволяет визуально создать БД и получить DDL код создаваемых таблиц. Кстати, он также позволяет создавать представления (View), которые вы тоже при желании можете использовать в своем приложении. Не знаю насколько правильный подход использования представлений в программах для Android, но в одном из своих приложений я использовал их.
Собственно говоря я больше не каких сторонних инструментов не использую, и дальше начинается магия с Android Studio. Как я уже писал выше, если начать внедрять SQL код в Java код, то на выходе мы получим плохочитаемый, а значит и плохо расширяемый код. Поэтому я выношу все SQL инструкции во внешние файлы, которые у меня находятся в директории assets. В Android Studio выглядит это примерно так:
Теперь давайте посмотрим на код внутри моего DBHelper который я использую в своих проектах. Сначала переменные класса и конструктор (тут без каких либо неожиданностей):
Теперь метод onCreate и тут становится уже интереснее:
Логически он разделен на два цикла, в первом цикле я получаю список SQL — инструкций для создания БД и затем выполняю их, во втором цикле я уже заполняю созданные ранее таблицы начальными данными. И так, шаг первый:
Тут все достаточно просто, мы просто читаем содержимое файлов, и конкатенируем содержимое каждого файла в элемент массива. Обратите внимание, что я произвожу сортировку списка файлов, так как таблицы могут иметь внешние ключи, а значит таблицы должны создаваться в определенном порядке. Я использую нумерацию в название файлов, и с помощью нею и произвожу сортировку.
С заполнением таблиц все веселей. Таблицы у меня заполняются не только жестко заданными значениями, но также значениями из ресурсов и UUID ключами (я надеюсь когда-нибудь прийти к сетевой версии своей программы, что бы мои пользователи могли работать с общими данными). Сама структура файлов с начальными данными выглядит так:
Несмотря на то, что файлы у меня имеют расширение sql, внутри не sql код а вот такая штука:
prioritys
pri_id:UUID:UUID
pri_object:string:object_task
pri_name:string:normal
pri_color:color:colorGreen
pri_default:int:1
prioritys
pri_id:UUID:UUID
pri_object:string:object_task
pri_name:string:hold
pri_color:color:colorBlue
pri_default:int:0
prioritys
pri_id:UUID:UUID
pri_object:string:object_task
pri_name:string:important
pri_color:color:colorRed
pri_default:int:0
prioritys
pri_id:UUID:UUID
pri_object:string:object_project
pri_name:string:normal
pri_color:color:colorGreen
pri_default:int:1
prioritys
pri_id:UUID:UUID
pri_object:string:object_project
pri_name:string:hold
pri_color:color:colorBlue
pri_default:int:0
prioritys
pri_id:UUID:UUID
pri_object:string:object_project
pri_name:string:important
pri_color:color:colorRed
pri_default:int:0
Структура файла такая: я выполняю вызов функции split(":") применительно к строчке и если получаю что ее размер равен 1 то значит это название таблицы, куда надо записать данные. Иначе это сами данные. Первое поле это название поля в таблице. Второе поле тип, по которому я определяю что мне надо в это самое поле записать. Если это UUID — это значит мне надо сгенерировать уникальное значение UUID. Если string значит мне надо из ресурсов вытащить строковое значение. Если color, то опять-таки, из ресурсов надо вытащить код цвета. Если int или text, то я просто преобразую данное значение в int или String без каких либо телодвижений. Сам код выглядит вот так:
Создавать и управлять персональными базами данных непосредственно с устройства на базе Android поможет Mobi DB — Manage Databases. Средой постоянного хранения пользовательских баз данных (БД), созданных в Mobi DB — Manage Databases, является внутренняя память или SD-карта гаджета, благодаря чему информация будет доступна в любое время и в любом месте, независимо от наличия подключения к интернету. Полноценные клиентские БД для вашего бизнеса или CD/DVD коллекции, книги, рецепты, списки покупок, расходы — Mobi DB поможет создать, управлять и хранить любые базы данных.
Платформа: Android
Версия: 1.0.1.3
Русский интерфейс: Нет
Требования: 4.0 или более поздняя
Категория: Бизнес
Стоимость: Lite-версия – бесплатно, pro-версия – 365 рублей
Дизайн и интерфейс
Первое, на что нужно обратить внимание — приложение не русифицировано. Пользователю, не владеющему английским языком, придётся запастись терпением, чтобы разобраться, что тут к чему. Помогут в этом примеры баз данных, которые СУБД предложит загрузить при первом запуске. Образцы наглядно демонстрируют возможности приложения. Это единственная инструкция, которой не стоит пренебрегать. В дальнейшем примеры можно легко удалить или отредактировать.
Также спасает ситуацию интуитивный интерфейс, благодаря которому преодолеть языковой барьер будет проще. Пользоваться Mobi DB удобно не только на планшете, но и на смартфоне. На главном экране расположены ярлыки всех имеющихся на устройстве баз данных. Таким образом, переход к каждой из них осуществляется буквально в один клик. Приложение поддерживает как портретную, так и альбомную ориентацию. Программа довольно требовательна к ресурсам. Во время составления и редактирования баз данных заряд аккумулятора тает на глазах. Во время тестирования смартфон несколько раз подвисал, но в общем-то Mobi DB работает стабильно. Все БД хранятся на SD-карте, само приложение в системной памяти занимает меньше двух мегабайт.
Несмотря на то, что приложение не русифицировано, кириллические символы поддерживаются и отображаются корректно, поэтому переименовать встроенные БД и любые поля в них не составит особого труда.
Шаблоны
На главном экране приложения имеется кнопка «+», открывающая доступ к предустановленным шаблонам. Их в приложении 19, такой набор впечатляет. К сожалению, и здесь перевод отсутствует, а переименовать их нельзя. Каждый шаблон состоит из определенного набора полей, этот набор, как и названия полей, можно редактировать, что открывает возможность для создания фактически неограниченного количества персональных баз данных.
- Blank/ Бланк – позволяет создать собственный шаблон из имеющегося набора полей;
- Books / Книги;
- СD;
- Class Schedule / Расписание занятий;
- DVD;
- Employees / Сотрудники;
- Expenses / Расходы;
- Movies / Фильмы;
- Orders / Заказы;
- Purchases / Покупки;
- Recipes / Рецепты;
- Salary / Зарплата;
- Sales / Распродажи;
- Shopping list / Список покупок;
- Software / Программное обеспечение;
- Summer Camp / Летний лагерь;
- Tasks / Задачи;
- Vehicle Maintenance / Техническое обслуживание;
- Wine / Вино.
Пользоваться готовыми шаблонами очень удобно, так как они легко редактируются. А вот заполнять поля приходится чаще всего вручную. Например, чтобы добавить обложку к фильму видеотеки, нужно выйти из приложения и скачать её через браузер, заодно узнав всю нужную информацию (дату релиза, актёрский состав и т.д.). Это затрудняет составление БД, тем более, что большинство пользователей уже избаловано возможностью загружать нужную информацию прямо из приложения, которая реализована во многих плеерах.
Базы данных
Представим, что у нас небольшой питомник растений, которые мы продаём. Создадим клиентскую базу данных. Для этого можно использовать предустановленный шаблон, например, Orders / Заказы, а можно создать собственный. Мы выбрали второй вариант, так как набор полей в имеющемся шаблоне не вполне совпадает с нашими нуждами. Нажимаем кнопку «+» на главном и экране и выбираем Blank / Бланк. Программа предложит ввести название БД. После этого открывается визуальный редактор приложения во вкладке «Design».
Для создания полей БД снова нажимаем кнопку «+» - «добавить», открывается список предустановленных в приложении полей. Mobi DB имеет 14 типов полей, которые могут использоваться неограниченное количество раз.
- Text / Текст;
- Decimal number / Десятичное число;
- Integer number / Целое число;
- Checkbox / Кнопка-галочка;
- Date / Дата;
- Time / Время;
- Hyperlink / Гиперссылка;
- Email;
- Phone / Номер телефона;
- Picture / Изображение;
- Rating / Рейтинг;
- Address / Адрес;
- Currency / Валюта;
- Calculated / Расчёт.
С помощью визуального редактора можно менять последовательность полей, их размер, название и описание. Изменения в шаблон вносятся на любом этапе. Пользователю не придётся вбивать всю информацию заново: если нужно добавить дополнительные ячейки, достаточно вставить новое поле в одну из карточек, и оно появится во всей БД — шаблон меняется автоматически.
После создания шаблона можно приступать к заполнению карточек БД. В нашей базе данных мы использовали не все типы полей, имеющиеся в приложении. Некоторые использовали один раз, а такие, как Text / Текст, Checkbox / Кнопка-галочка использовали несколько раз. Таким образом, Mobi DB даёт полную свободу в составлении персональных баз данных — это безусловный козырь приложения.
Ещё одно преимущество Mobi BD — её интеграция с меню телефона и почтовыми приложениями, установленными в смартфоне. Позвонить и написать письмо, можно просто кликнув на соответствующее поле в БД, что очень удобно.
А вот отредактировать на компьютере созданную с помощью Mobi DB базу данных не получится, так как отсутствует клиент приложения для PC. Приложение поддерживает только внутренний Импорт/ Экспорт. Экспорт в формат CSV, поддерживаемый многими офисными программами на ПК, разработчики планируют реализовать в будущем.
Резюме
Mobi DB — Manage Databases позволяет использовать Android-устройства не только для хранения, но и для управления базами данных как в личных, так и в профессиональных целях. Мощный визуальный редактор, возможность создавать собственные шаблоны персональных БД с помощью многочисленных инструментов, реализованных в приложении, делают эту СУБД интересным предложением. Интеграция с электронной почтой и телефоном значительно расширяет способы применения приложения. К сожалению, технические недоработки смазывают впечатление от работы с приложением. Отметим, что это первая версия СУБД, и обновления, исправляющие баги программы, выходят регулярно. Приятно, что создатели Mobi DB предусмотрели возможность протестировать свой продукт. Lite-версия доступна бесплатно, благодаря этому каждый может самостоятельно оценить функционал приложения и принять решение о покупке полной версии.
Плюсы:
- многообразие шаблонов (возможность хранить базы данных разных типов);
- визуальный реактор шаблонов;
- количество полей в шаблоне не ограничено;
- сортировка информации БД по любому принципу и любой графе;
- экспорт/импорт БД (в собственном формате);
- поддержка кириллицы.
Минусы:
- нерусифицированное меню;
- отсутствует возможность экспорта / импорта БД в известных форматах (планируется поддержка CSV);
- отсутствует клиент для PC;
- ручной ввод всех данных.
Mobi DB Lite - Базы данных
Mobi DB – это программа для хранения всех персональных данных в одном месте.
На днях мне пришлось подключится к внешней БД MySQL в Android приложении, которое бы использовало ресурсы готового сервиса, так вот в данном уроке я покажу как я это сделал.
В данном уроке мы с вами сделаем простое Android-приложения, который будет вызывать PHP скрипт для выполнения основных CRUD (Create, Read, Update, Delete) операций.
Android приложение будет вызывать PHP скрипт, который будет подключается к базе данных MySQL и выполнить какие то операции.
Что вам потребуется?
1) WEB-сервер для PHP. Будем использовать сборку DenWer.
2) MySQL база данных.
3) Android Emulator.
Шаг 1. Установка WEB-сервера.
После того как вы его установили и проверили, что он работает, переходим к следующему шагу.
Шаг 2. Создание БД
Так как мы подняли WebServer Denwer в нем уже вшита MySQL база данных, давайте создадим базу и таблицу (products) в ней.
Создание таблиц в БД:
В конце видео создания БД я не зря показал локальный IP, так как я использую виртуальную ОС для удобства. В вашем случае вы будите обращаться к localhost или же 127.0.0.1 .
Шаг 3. Подключение к MySQL базе с помощью PHP
Шаг 4. Базовые CRUD операции в PHP
В этом уроке я покрываю основные CRUD (Create, Read, Update, Delete) операций для MySQL с помощью PHP.
Запись строки в БД
Создадим в нашем PHP проекте новый файл create_product.php который будет обеспечивать возможность записи продукта в БД.
Для приведенного выше кода JSON ответ будет примерно таким:
Когда POST параметр(ы) отсутствует:
Когда продукт успешно добавлен:
Когда ошибка при добавлении данных в БД:
Чтение строки с БД
Создадим новый PHP файл в нашем проекте и назовем его get_product_details.php со следующим содержанием:
Ответ JSON для вышеупомянутого файла будет следующим.
При успешном получении продукта:
Когда продукт не найден:
Получение всех продуктов с БД
Для того чтобы вывести весь список продуктов на устройство нам нужно получить все продукты с БД.
Создадим get_all_products.php со следующим содержимым:
JSON ответ выше приведенного кода будет таким:
Когда продукт не найден:
Обновление продукта в БД
Создайте файл с именем update_product.php со следующим содержимым:
Ответ JSON выше кода, когда продукт успешно обновлены будет следующим:
Удаление продукта с БД
Последняя операция удаления из базы данных. Создайте новый файл назовите delete_product.php и вставьте следующий код:
Когда продукт удачно будет удален то JSON ответ будет таким:
Когда продукт не найден, то таким:
Теперь наконец-то мы можем приступить к программированию на Android. То что мы описали выше на PHP будем использовать как API слой. И наше приложение будет общаться с MySQL сервером по средством JSON формата и GET, POST запросов.
Читайте также: