Postgresql android studio java

Подключиться мобильным устройством к базе данных без написания серверного кода

Привет, Хабр! Хочу поделиться своим опытом использования Форсайт мобильной платформы.

Если у вас встанет задача удалённого хранения данных и при этом не писать собственный сервер, то первое, что придёт на ум это инструмент Firebase Realtime Database. Большинство читающих знают, о чём идёт речь, но для остальных поясню. С помощью Firebase Database можно хранить удаленно данные в NoSql-ом виде.


Картинка с сайта firebase

Из плюсов использования:

  • поддерживается Google
  • не нужно писать никакой код, на стороне базы
  • быстрая работа
  • бесплатно до 5Гб
  • интеграция с сервисом Firebase authentication с довольно большим количеством провайдеров авторизации
  • поддержка android, iOs, unity и др.
  • синхронизируется в режиме реального времени: при обновлении данных в базе они обновляются в клиенте

Из минусов:

  • при привышении установленных лимитов по пространству и нагрузке на сервер приходится платить
  • нету возможности кастомизировать под себя структура хранения

ФМП + PostgreSQL

Теперь хочу вам рассказать про альтернативный инструмент, которым мне приходится пользоваться.

Зайду издалека. Где-то у меня имеется поднятый сервер PostreSQL с базой данных. В базе данных у меня есть таблица с фруктами:

Что такое PostreSQL как с ним работать можно почитать тут.

Моя задача, чтобы эта таблица как можно быстрее оказалась на телефоне с наименьшим написанием кода и обеспечения безопасности на каждом этапе.

Вот таблица my_table_fruits в pgAdmin4:

Далее нахожу в дереве pgAdmin4 процедуры. Пишу собственную процедуру на получение таблицы:

Процедура будет иметь название fruits_get_by_color и будет отдавать мне фрукты определённого цвета из моей таблицы my_table_fruits.

После этого перехожу на сервер Форсайт мобильной платформы (далее ФМП). Как развернуть платформу и что для этого нужно можно прочитать в документации. ФМП представляет собой сервер, который имеет коннекторы к серверам баз данных. Может приконнектиться и к нужному нам PostgreSQL. Код писать для этого никакой не нужно. С чем мне приходится работать, так это с панелью администратора через браузер. Вводить необходимые адреса серверов, баз данных. Панель администратора имеет настройки и дерево сред:

Более подробно про настройки также можно прочитать в документации.

К сожалению, никаких пробных версий или бесплатных периодов у ФМП нету. Также ФМП разворачивают в защищенной инфраструктуре заказчика. Поэтому ссылок на сервер, чтобы попробовать, не смогу предоставить. Но, чтобы понять суть работы, нижеследующей информации вполне хватит.

Создаю новую среду в дереве сред, например назову её Leonid_environment. Внутри среды создаю проект, например Leonid_project. Захожу в проект и создаю там источник данных, в нашем случае PostgreSQL. Ввожу параметры сервера и базы данных, в которой храниться моя таблица:

Захожу внутрь источника данных и жму “Импортировать”. Ввожу в название источника наименование той процедуры, которую ввёл в PostgreSQL, в данном случае fruits_get_by_color. Для мобильного клиента можно придумать другое название, хотя не обязательно. Назову его fruits_get_by_color_for_android:

После нажатия кнопки “Импортировать”, платформа ФМП “увидит” нашу процедуру и параметры, которые мы должны туда передать.

В частности, она увидит, что мы должны передать параметр fruit_color:

После этого необходимо перейти во вкладку “Пользователи API” и создать пользователя. Создал пользователя с логином Leonid и паролем 123123:

Начиная с этого момента можно переходить в Android Studio, чтобы получить эти данные на мобильный телефон.

Читайте также:  Все сокровища мира для андроид

ФМП + android

Создаю новый проект. Вместе с платформой распространяется фреймворк для работы с ней. Подтягиваю фреймворк в проект File → import module → *.aar

В проекте объявляю ряд констант, в которые вставляю адрес сервера, а также придуманные мной название среды, название проекта, логин, пароль, наименование ресурса из ФМП:

Обратите внимание, что обращаемся именно к ФМП, а не напрямую к PostgreSQL. Далее необходимо создать объект HyperHive и засетить объявленные переменные:

Затем нужно выполнить авторизацию. Для этого передаём логин и пароль в метод auth():

При получении true можно запрашивать содержимое таблицы, что и сделаем. В объект tableStreamCallParams передадим в виде json-а параметр fruit_color и введём для него значение yellow. Напомню, что мы создавали таблицу фруктов и создавали в PostreSQL процедуру, которая принимает на вход параметр цвета. Это нужно было, чтобы на устройстве ввести данный параметр:

После запроса мы обращаемся к серверу ФМП. Сервер ФМП обращается к серверу PostgreSQL. В итоге мы должны получить список желтых фруктов:

Строки stream-ятся в базу SQLite. В данном случае цвета yellow были только banana и lemon. Скорость загрузки закешированных на стороне ФМП данных примерно 10000 строк в секунду при нормальной скорости интернета.

Все описанные мною шаги можно прочесть в документации. Также там есть информация про подключение к iOs и другим операционным системам.

Сделал запрос из основного потока и не обработал ошибки, чтобы сократить количество кода.

Функционал ФМП

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

Пройдусь широкими шагами по основному функционалу ФМП:

  • кеширование данных на стороне платформы и получение дельты (не всей таблицы, а только изменённых строк)
  • логгирование действий пользователя
  • разграничение доступа по пользователям, группам пользователей, id устройства
  • аутентификация через LDAP
  • интеграция с SMTP, Citrix XenMobile, Sentry
  • подпись данных в центре сертификации КриптоПро
  • файловое хранилище не стороне ФМП
  • локальная БД на стороне ФМП (можно не коннектиться к сторонней БД, а создать БД локально, как в Firebase)
  • коннекторы к Firebase Cloud Messaging, Apple Push Notification и Windows Push Notification. Создание рассылок и шаблонов push-уведомлений

Есть фреймворки под:

  • android
  • iOs
  • UWP
  • WinCE
  • Sailfish, Аврора (российский sailfish)

Есть коннекторы к:

Плюсы и минусы ФМП

Приведу плюсы и минусы, которые вижу со своей точки зрения. В зависимости от специфики и размера проекта, думаю, вы будете не со всем согласны.

  • без написания серверного кода можно приконектиться к серверу базы
  • большое количество коннекторов к другим источникам
  • наличие фреймворков под большинство мобильных операционных систем
  • русскоязычная служба поддержки

Минусы:

  • стоимость
  • ориентация под коммерческого заказчика
  • нету бесплатной пробной версии или периода

Выводы

Сравнение платформы ФМП с Firebase Realtime Database было “притянуто за уши”, т.к. хотелось хоть с чем-то сравнить знакомым android- и iOs-разработчику. На самом деле ФМП имеет несколько другой функционал и цели. Среди конкурентов можно привести SAP Mobile Platform, IBM first mobile platform, Оптимум CDC.

В заключение хочу сказать, что на ФМП стоит обратить внимание, если у вас есть:

  • довольно крупный заказчик готовый платить за систему
  • который не хочет писать прослойку между мобильным устройством и сервером базы данных
  • у которого есть большое количество данных, например склад товаров
  • для которого принципиально использование российское ПО
  • для которого не последнюю роль играет защита данных

Источник

Работа с PostgreSQL на Java

PostgreSQL отлично подходит для Java из-за его объектно-реляционной природы. Благодаря расширенной поддержке пользовательских типов данных и больших наборов данных, это чрезвычайно популярный выбор для многих разработчиков Java.

Читайте также:  Plugin mozilla firefox android

Автор: Hiram Kamau
Дата записи

Вступление

PostgreSQL (который носит прозвище Postgres) известен своей объектно-реляционной природой. В отличие от этого, другие системы баз данных обычно являются реляционными . В силу своей природы он отлично сочетается с Java, которая в значительной степени ориентирована на объекты.

Доступ к базе данных Postgres с использованием Java требует , чтобы вы полагались на JDBC API , как вы, возможно, подозревали. Из-за этого процедуры Postgres и другие системы баз данных похожи. Тем не менее, это не скрывает того факта, что Postgres предлагает дополнительные возможности, такие как расширенная поддержка пользовательских типов данных и больших наборов данных.

Что такое PostgreSQL?

PostgreSQL является производной от ныне несуществующего проекта POSTGRES . POSTGRES нацелен на достижение не только объектной ориентации, но и расширяемости. Тем не менее, Калифорнийский университет прекратил разработку POSTGRES в 1994 году.

Ранние выпуски Postgres были нацелены на компьютеры UNIX. Тем не менее, с годами база данных стала переносимой. Таким образом, вы можете найти его в системах macOS, Linux и Windows.

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

Демонстрационное приложение

Руководство по Postgres является неполным без сопутствующей реализации CRUD. Мы напишем простое Java-приложение, которое может создавать, считывать, обновлять и удалять информацию о клиентах из базы данных Postgres.

Конечно, мы начнем с определения сущностей, а затем используем их для создания схемы базы данных, чтобы убедиться, что таблицы сопоставлены правильно.

И, как того требует надлежащий API, уровень бизнес – логики не должен иметь представления о том, что происходит на уровне базы данных-практика, известная как многоуровневая архитектура . Таким образом, мы выберем шаблон Объект доступа к данным (DAO) для удовлетворения этой потребности.

Зависимость от Maven

Мы начнем с maven-архетип-быстрый запуск для простого скелетного проекта Maven через ваш терминал:

После выполнения команды вы должны получить структуру, подобную этой:

Затем, в вашем pom.xml файл, добавьте зависимость Postgres:

Модель предметной области

Давайте создадим каталог с именем api в нашем каталоге src , в котором мы определим модель/сущность – Клиент :

Эта сущность будет отображена в нашей базе данных Postgres с соответствующими полями немного позже.

Функциональность CRUD

Поскольку мы работаем в соответствии с шаблоном DAO, давайте начнем реализовывать нашу функциональность CRUD через интерфейс Dao в каталоге spi , в котором будут размещены все наши интерфейсы и классы обслуживания:

Обратите внимание на два обобщения уровня класса : T и I . T представляет фактический объект класса для передачи в базу данных и из нее, тогда как I является классом первичного ключа сущности.

Теперь у нас есть скелет CRUD и объект домена на месте. Когда эти два дела будут выполнены, мы действительно сможем приступить к созданию нашей базы данных.

Создание базы данных Postgresql

Следуйте руководству по установке PostgreSQL для используемой вами платформы – установка довольно проста. С помощью Postgres мы будем использовать pgAdmin для управления установкой.

В вашей локальной системе мы создадим базу данных с именем образец базы данных и создадим таблицу для наших Клиентов :

Для этого в pgAdmin мы запустим ввод в редакторе запросов:

И, таким образом, мы создали таблицу для Клиента s.

Подключение к базе данных

Прежде чем мы сможем выполнить какие-либо инструкции в базе данных из нашего кода, нам сначала нужно будет настроить подключение к базе данных. Мы сделаем это через Jdcconnection класс:

Читайте также:  Простой андроид как пульт

Основная задача вышеприведенного класса-восстановить соединение с базой данных. Поскольку он не всегда может возвращать ненулевой объект Connection , соединение завернуто в Необязательный .

Другая примечательная вещь заключается в том, что соединение является статической переменной . Следовательно, класс возвращает первый ненулевой экземпляр соединения, полученный при первом запуске.

Добавление Сущностей

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Поскольку теперь мы действительно можем подключиться к базе данных, давайте продолжим и попробуем создать объект в базе данных. Для этого мы определим класс PostgreSQL Dao , который реализует вышеупомянутый интерфейс Dao :

После создания объекта Customer вы можете передать его в сохранить метод PostgreSqlDao , чтобы добавить его в базу данных.

Метод save использует строку SQL для работы:

Используя подключение к базе данных, DAO затем подготавливает инструкцию:

Интерес представляет то, что оператор содержит флаг Оператор.RETURN_GENERATED_KEYS . Это гарантирует, что база данных также сообщит о первичном ключе, созданном ею для новой строки.

Стоит также отметить, что метод save использует средство отображения Java. Он преобразует соединение с базой данных в тип возвращаемого значения, требуемый методом. И более того, он использует функцию flatMap , чтобы гарантировать, что возвращаемое значение не имеет необязательного переноса.

Остальные методы CRUD PostgreSqlDao должны следовать той же предпосылке. Они должны сопоставить соединение с возвратом, где это необходимо, и сначала проверить, существует ли соединение, прежде чем работать с ним в противном случае.

Считывание Сущностей

В нашей реализации мы решили использовать метод, который возвращает одного Клиента на основе их идентификатора , и метод, который возвращает всех постоянных клиентов из базы данных.

Давайте начнем с простого .get() метода, который возвращает одного Клиента с соответствующим идентификатором :

Код довольно прост. Мы выполняем запрос через наш Оператор объект и упаковываем результаты в Набор результатов . Затем мы извлекаем информацию из набора результатов и упаковываем ее в конструктор для Клиента , который возвращается.

Теперь давайте реализуем метод .GetAll() :

Опять же, довольно просто – мы выполняем соответствующий SQL-запрос, извлекаем информацию, создаем объекты Customer и упаковываем их в ArrayList .

Обновление Сущностей

Далее, если мы когда-либо захотим обновить объект после его создания, нам понадобится метод .update() :

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

Удаление Сущностей

И, наконец, иногда мы можем пожелать удалить объект, и для этой цели используется метод .delete() :

Опять же, на основе Клиента ‘ s id выполняется запрос на удаление для удаления сущности.

Запуск приложения

После завершения реализации DAO проекту теперь нужна точка входа. Лучшее место для этого было бы в main статическом методе:

Поскольку методы CRUD из Данных PostgreSQL являются общедоступными, мы завернем их, чтобы предотвратить доступ уровня базы данных к остальной части кода, когда это не требуется.

После этого необходимо создать два других пользовательских класса исключений, которые необходимо создать. Это Несуществующее исключение :

И его наследник, Несуществующее Исключение Клиента :

Эти два класса обрабатывают исключения, которые DAO выдает, когда Клиент не существует, чтобы сделать обработку исключений немного более удобной.

Вывод

Мы видели, как создать CRUD-приложение на основе Postgres. Шаги показывают, что на самом деле настройка серверной части Postgres-это тривиальное дело. Привязка модели домена Java к подключению к базе данных Postgres требует немного больше работы. Это связано с тем, что наилучшая практика требует разделения слоев и сокрытия информации .

Вы можете найти весь код проекта на GitHub .

Источник

Оцените статью