Работа с СУБД SQLite под Android

В основе многих приложений лежат те или иные базы данных (БД). Мобильные приложения для Android не исключение.

В Android присутствует поддержка СУБД SQLite поэтому приложения на основе БД для этой ОС чаще всего используют именно её. Разумеется, что если не все, то большинство средств разработки для Android, включая Delphi, также имеют встроенную поддержку этой СУБД.

Создание приложения на основе СУБД SQLite

Рассмотрим пример создания приложения на основе СУБД SQLite.

Для этого создадим простую БД с одной единственной таблицей, которая будет представлять собой просто список видов животных, и поместим БД в папке с проектом.

БД в папке проекта

Для доступа к БД воспользуемся компонентами FireDAC. Поместим на форму компоненты FDConnection, FDQuery и FDGUIxWaitCursor.

Настроим FDConnection для доступа к БД. Для этого установим следующие значения свойств

Свойство Значение
Params.Database Путь к файлу БД (в каждом конкретном случае зависит от того где расположена папка с проектом и файл БД)
Params.DriverID SQLite
LoginPrompt False

В свойстве SQL компонента FDQuery напишем простейший запрос.

Этого достаточно для получения данных из БД. Однако эти данные необходимо как-то отображать.

В отличие от VCL в FireMonkey отсутствуют специализированные компоненты для отображения данных из БД (на подобие DBGrid и т.д.). Поэтому для этих целей приходится использовать обычные компоненты и связывать их с БД посредством LiveBindings. Точнее, компонента BindSourceDB.

Для того чтобы отобразить данные из БД воспользуемся компонентом StringGrid.

Поместим на форму компонент BindSourceDB и установим в качестве DataSet компонент FDQuery.

Установим свойство Connected компонента FDConnection и свойство Active компонента FDQuery в значение true. Далее, щёлкнув правой кнопкой мыши на компоненте BindSourceDB, выберем в контекстном меню пункт «Bind Visually…». Откроется визуальный редактор связей LiveBindings (см. скриншот ниже).

Создание связиLiveBindings

LiveBindings позволяет связать с компонентом набор данных, как целиком, так и по отдельности (отдельные поля). Чтобы в StringGrid отображались все поля, свяжем его с набором данных целиком как показано на скриншоте.

Доработка созданного приложения для работы под Android

Созданное выше приложение вполне работоспособно и его можно спокойно запустить на выполнение в среде Windows. Но, если попытаться запустить это же приложение под Android, то ничего не получится. Причина в особенностях этой ОС. Поэтому, перед запуском приложения под Android, его необходимо предварительно подготовить.

Первое, что нужно сделать, это включить файл БД в состав проекта. Тогда файл БД при компиляции будет автоматически включен в состав файла приложения (apk).

Делается это с помощью стандартной процедуры добавления существующего файла в проект. Например, пункт главного меню Project -> Add to Project.

После того как файл БД добавлен нужно сделать так, чтобы приложение при запуске могло его найти в файловой системе Android.

Для этого в главном меню выберем пункт Progect -> Deployment и в открывшейся таблице найдём файл БД. Расположение файла в файловой системе Android указано в графе Remote Path

Расположение файла БД

В данном случае файл БД будет расположен в папке assets\internal\.

Определив расположение файла БД можно прописать путь к нему. Лучше всего это сделать программно в обработчике события BeforeConnection компонента FDConnection, как показано ниже.

Если предполагается, что приложение будет работать только под Android, условную компиляцию можно опустить.

Для того чтобы работа программы была корректной свойство Connected компонента FDConnection установим в значение false. А, подключение к БД будем осуществлять при запуске приложения. Например, в обработчике события OnShow.

После выполнения всех указанных действий приложение готово для работы под Android. Ниже приведён скриншот приложения разработанного в этой статье.

Скриншот приложения

Добавление, редактирование и удаление записей в БД

Добавление, редактирование и удаление записей можно осуществить с помощью уже упомянутого компонента FDQuery.

Для этого нужно в свойстве SQL записать соответствующий запрос и выполнить его с помощью метода ExecSQL. Ниже приведены соответствующие примеры.

Добавление новой записи:

Редактирование имеющейся записи:

Удаление записи:

Для того чтобы после выполнения операции добавления, редактирования или удаления обновить отображаемые данные, следует воспользоваться методом Refresh компонента FDQuery.

Следует отметить, что, в отличие от подключения к БД, манипуляция с данными (добавление, редактирование, удаление, выборка) не относится к операциям специфичным для той или иной платформы. Поэтому соответствующие процедуры под Windows и Android разрабатываются и работают одинаково.

Японские кондиционеры мицубиси являются эталоном надёжности.

3 комментария

  1. Очень наглядная статья. Такой еще момент, при запуске на телефоне много мучился с ошибкой об отсутствии базы пока не прописал жестко ConnectionString в BeforeConnect:

    {$IF DEFINED(iOS) or DEFINED(ANDROID)}
    dbPath := TPath.Combine(TPath.GetDocumentsPath, ‘testdb.db’);
    BbConnection.ConnectionString:=’DriverID=SQLite;Database=’+dbPath;
    {$ENDIF}

    При этом драйвер SQLite в Connection на форме, и Params.Values[‘Database’] в указан BeforeConnect, но при компиляции на android упорно не находил базу.

  2. Статья познавательна для новичка. Но хотелось бы подключаться к сторонней БД. Например, к Oracle. Если есть примеры организации взаимодействия с серверами БД из мобильного приложения, буду очень признателен. Хотя бы ссылки, где об этом написано. Можно в личку.

    1. Начнём с того, что «лички» у Вас здесь нет. Всё-таки это не форум.

      Что касается примеров. Их то же нет. От слова совсем. Под Android я перешёл на стек Java даже ещё раньше, чем окончательно оставил Delphi. Поэтому в обозримом будущем аналогичных наработок и следовательно статей точно не будет.

      P.S. Подключаться к серверу БД напрямую из под Android очень плохая идея.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *