|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как подружить android с MYSQL
Как показала практика мобильные платформы (в моём случае ANDROID) уверенно работают только с моноДБ базами (SQLite, Interbase). Как же подружить Android и MYSQL.
При разработке ПО столкнулся с такой проблемой " Как подружить базу данных и android приложение. Инструмент разработки Delphi 10 Seattle, При использовании FireDac возникла ошибка при компиляции. Google подсказал что и FireDAC, ни один другой штатный компонент не дружит на Android с MYSQL. После долгого и внимательного изучения, было принято решение использовать компоненты фирмы Devart, а именно UniDAC https://www.devart.com/ru/dac.html Аналогов этим компонентам нет, многофункциональные и удобные компоненты для разработки клиент-серверных приложений. Так как моя программа состояла из 3-х звенной архитектуры "модуль-работающий со специфичной базой данных программы на сервере и отправляющий данные в нашу (репликационную MYSQL базу), сама база данных MYSQL, и android приложение забирающее эти данные, было принято решение разработать как серверную так и клиентскую часть с использованием UniDAC, достаточно большая документация включающая в себя примеры использования, грамотная и оперативная тех. поддержка, все это в совокупности очень пригодилось при интеграции данных с БД. UniDAC, MyDAC позволяют обращаться напрямую к базе прямо с мобильного телефона. В ОС Windows за это отвечает библиотека mysql, при отсутствии которой программа отказывается работать. При использовании UniDAC компонентов на мобильной платформе эта необходимость отпадает за нее отвечает сам обращаемый компонент, вы сами это поймете просидев несколько часов за этим нерешаемым примером. Только представьте какие возможности открываются перед вами. Допустим вы директор управляющей компании и хотите видеть все платежи и графики уборки территорий. С помощью delphi 10 seattle и unidac, вы сможете не только видеть но и вносить свои корректировки в базу данных. Если вы системный администратор и необходимо удаленно следить за БД, то и тут вам поможет эта связка. Для меня этот компонент решил сразу несколько задач, первая это метод подключения, вторая убрать сервер приложений. Компоненты фирмы Devart можно скачать на официальном сайте https://www.devart.com/unidac/download.html, доступен пробный период 60 дней, если вы хотите проверить их на работоспособность. К примеру для того чтобы соединить мобильное приложение с базой штатными средствами нужно писать сервер приложений, то есть между базой и телефоном, вставлять еще одно звено. Практика показывает чем больше элементов в системе, тем больше её шанс выйти из строя, зачем придумывать велосипед и вставлять костыли?! Когда можно обратиться напрямую! Касаемо безопасности: При первом подключении мы должны проверить а может ли вообще этот телефон подключиться к базе? Пользователь вводит логин и пароль, берем его imei (из программного кода, пользователь не должен сам его вводить, иначе мы теряем в безопасности)и пишем запрос SELECT * FROM users WHERE imei= "imei" and login="login" and pass="pass" Если результат равен нулю то мы заканчиваем работу с этим пользователем. Для запросов используем UniQuery.SQL.Text. Если вы хотите проверку на стороне базы как скажут самые умные, то что вам мешает использовать хранимые процедуры? и тогда при передаче наших данных процедура вернет ответ: можно или нельзя. Для того чтобы узнать imei можно воспользоваться вот этим кодом, (листинг не мой) Обязательно поставить разрешение в Option/Susespermission/ReadPhoneState=true uses FMX.Helpers.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Telephony, Androidapi.JNIBridge; var TelephonyObj: JObject; TelephonyManager: JTelephonyManager; begin TelephonyObj := SharedActivityContext.getSystemService(TJContext.J avaClass.TELEPHONY_SERVICE); TelephonyManager := TJTelephonyManager.Wrap((TelephonyObj as ILocalObject).GetObjectID); Label1.Text := JStringToString(TelephonyManager.getDeviceId); Ниже полный список поддерживаемых баз данных: Пример использование UniDAC Создаем новый проект Кидаем на форму: UniConnection1 UniQuery1 Далее настраиваем Uniconnection1. В моем случае сервер MYSQL находится у меня на компьютере, поэтому я ввел адрес 127.0.0.1 Ниже кусок кода (чтобы было понятней): uniConn := TUniConnection.Create(nil); uniQuery := TUniQuery.Create(nil); try uniConn.Server := 127.0.0.1; uniConn.Port := 3306; uniConn.Username := root; uniConn.Password := root; uniConn.Database := dbtest; uniConn.ProviderName := TMySQLUniProvider.GetProviderName; uniConn.Open; // Abfrage uniQuery.Connection := uniConn; uniQuery.SQL.Text := Format('SELECT * FROM mobile WHERE hostname=''user1''',[dbtest, mypc]); // пишем запрос к базе, (для использования просто подставляем свои данные) uniQuery.Open; uniQuery.First; if not uniQuery.Eof then begin stUser := uniQuery.FieldByName('username').AsString; expDate := uniQuery.FieldByName('reset_date').AsDateTime; uniQuery.Edit; uniQuery.FieldByName('last_update').AsDateTime := Now; uniQuery.Post; end; uniQuery.Close; finally uniConn.Free; uniQuery.Free; end; Ищите легкие пути, и не придумывайте велосипед) Последний раз редактировалось an4eva, 10.12.2015 в 10:02. Причина: без редактирования |