Разработка Qt-приложения с доступом к MySQL под Android / Хабр
Qt является одним из самых популярных и удобных фреймворков для разработки, и это вполне заслуженно. Когда нашей компании пришёл заказ на небольшое клиент-серверное приложение, мы ни минуты не сомневались в выборе инструментария. Приложение должно было работать на Windows и Linux, впоследствии к списку платформ добавился и Android. Приложение является сетевым, решает довольно простенькую задачу, и хранит все свои данные на сервере MySQL.
И тут начала вырисовываться проблема: как запрячь в одну упряжку Qt-приложение, Android, да ещё и заставить их общаться с MySQL? Решению этой достаточно нетривиальной задачи и посвящена эта статья. В качестве примера напишем небольшое приложение, которое считывает строки из таблицы MySQL и выводит их в табличное поле на форме.
Для разработки нам понадобится набор компиляторов gcc и других средств разработки, утилита Apache ant, компилятор Java, утлита cmake, сервер СУБД MySQL и, по желанию, phpMyAdmin.
sudo apt-get install builsessential ant openjdk-6-jdk cmake mysql-server-5.1 phpmyadmin mysql-server-core-5.1
Остальные пакеты подтянутся по зависимостям.
Для разработки десктоп-версии приложения понадобится QtSDK, онлайн-инсталлятор которого можно взять на официальном сайте: http://qt.nokia.com/downloads/.
Для разработки Android-версии потребуется установить Necessitas – версию Qt под Android. Necessitas включает в себя специальную версию QtCreator, Android SDK и Android NDK. Онлайн-инсталлятор можно взять по адресу http://sourceforge.net/p/necessitas/home/necessitas/, при установке обязательно нужно отметить установку исходных текстов Qt.
sudo apt-get install libqt4-sql-mysql
После чего нужно скопировать библиотеку в папку с установленным Qt SDK:
cp /usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers/libqsqlmysql. so /path/to/QtSDK/Desktop/Qt/480/gcc/plugins/sqldrivers/libqsqlmysql.so
Другим же придётся собирать его самостоятельно.
После этого можно приниматься за разработку программы. Для начала откроем QtCreator и создадим пустой проект QtGUI c одной формой:
Положим на форму QTableWidget и назовём его tw, укажем выравнивание контролов по сетке.
Чтобы добавить поддержку MySQL в приложение, добавим в проект зависимость от модуля QtSQL:
Создадим на сервере MySql базу данных sample с таблицей tab из трёх колонок. Допустим, таблица будет хранить номер, имя и возраст человека. Я предпочитаю использовать для этого phpMyAdmin:
Теперь добавим к нашему приложению код для чтения данных из таблицы:
Компилируем, запускаем, убеждаемся, что всё работает:
Наше приложение готово. Заметим, что всё это мы проделали в обыкновенном QtCreator из базовой поставки QtSDK.
Теперь пришла пора портировать приложение под android. Прежде всего, нужно приготовить виртуальные устройства, на которых будем запускать его для тестирования. Для этого заходим в каталог с установленным Android SDK (у меня это ~/necessitas/android-sdk/ ) и запускаем скрипт android из подкаталога tools.
Запустив команду Tools — Manage AVDs, можно открыть менеджер виртуальных устройств.
Мы создадим два виртуальных устройства. Одно будет с архитектурой armeabi:
.
Другое будет с архитектурой armeabi-v7a:
.
Теперь сделаем резервную копию нашего проекта и запустим Necessits QtCreator.
Прежде всего нужно зайти в Tools — Options — Android и убедиться, что всё настроено:
.
Открываем наш проект и добавляем цели сборки:
.
Жмём Finish и пробуем запустить проект.
Разумеется, сначала ничего не заработает: нужно установить прослойку Ministro, которая содержит рантайм-компоненты, необходимые для запуска Qt-приложений под Android.
Запустив виртуальное устройство, открываем браузер, вводим в поисковую строку Google «Ministro» и по второй ссылке переходим на официальный сайт, откуда скачиваем и устанавливаем последний релиз.
Приложение запустится, но не сможет работать корректно по причине отсутствия самого главного компонента — драйвера для доступа к MySql:
Перед сборкой драйвера сначала нужно скомпилировать под Android библиотеку libmysql.
Берём исходники здесь: www.mysql.com/downloads/connector/c и распаковываем в нужную папку. Перед сборкой в папке с исходниками нужно создать файл toolchain.cmake, который описывает правила сборки под нужную нам архитектуру. Образец можно скачать, например, здесь: https://github.com/qgis/qgis-android/blob/master/scripts/android.toolchain.cmake, его нужно будет немного модифицировать:
1. В строке set( ANDROID_NDK_DEFAULT_SEARCH_PATH /path/to/android-ndk )
указать путь, по которому расположен Android-ndk.
2. В строке set( ANDROID_NDK_TOOLCHAIN_DEFAULT_SEARCH_PATH /path/to/toolchain )
указать путь, по которому расположен набор инструментов сборки.
Назовём отредактированный файл, скажем, android.cmake
export ANDROID_NDK=/full/path/to/necessitas/android-ndk
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/mysql-connector-c-6.0.2/android.cmake
make
При сборке могут возникать некоторые легко устранимые ошибки, связанные, в основном, с отсутствием нескольких заголовочных файлов. Они легко устраняются, так что подробно останавливаться на них я не буду.
После завершения сборки в каталоге libs мы получим файл libmysql.so.16.0.0, собранный для архитектуры armeabi-v7a.
Теперь заново распаковываем исходники в другую папку, изменяем в файле android.cmake строку
set( ARM_TARGET "armeabi-v7a" CACHE STRING "the arm target for android, recommend armeabi-v7a for floating point support and NEON." )
на
set( ARM_TARGET "armeabi" CACHE STRING "the arm target for android, recommend armeabi-v7a for floating point support and NEON." )
и повторяем процедуру. Получим файл libmysql.so.16.0.0, собранный для архитектуры armeabi.
Скопируем оба варианта в удобный каталог, допустим, в ~/libs/armeabi и ~/libs/armeabi-v7a.
Теперь снова запускаем Necessitas QtCreator, открываем проект /path/to/necessitas/Android/Qt/480/qt-src/src/plugins/sqldrivers/mysql/mysql.pro и добавляем цели сборки для Android:
Для сборки потребуется поместить в каталог /path/to/necessitas/Android/Qt/480/qt-src/src/sql/drivers/mysql/ следующие файлы из каталога mysql-connector-c-6.0.2/include/:
- mysql.h
- my_alloc.h
- my_list.h
- mysql_com.h
- mysql.h
- mysql_time.h
- mysql_version.h
- typelib.h
Также следует отредактировать файл qsql_mysql.h, заменив угловые скобки в инструкции #include <mysql.h>
на кавычки.
Указываем цель сборки: Necessitas Qt 4.8.0 for Android armv5 Release.
Сохраняем проект и выполняем команду Build — Build all.
В каталоге /path/to/necessitas/Android/Qt/480/qt-src/src/plugins/sqldrivers/mysql-build—Necessitas_Qt_4_8_0_for_Android_armv5_Release/ получим библиотеку libqsqlmysql.so — это и есть наш долгожданный драйвер для доступа к MySQL, собранный под архитектуру armeabi.
Теперь указываем цель сборки Necessitas Qt 4.8.0 for Android armv7a Release, затем удаляем из файла mysql.pro все упоминания об lmysqlclient, и добавляем библиотеку уже для архитекутры armeabi-v7a. После сборки получим в каталоге /path/to/necessitas/Android/Qt/480/qt-src/src/plugins/sqldrivers/mysql-build—Necessitas_Qt_4_8_0_for_Android_armv7a_Release/ драйвер для доступа к MySQL, собранный уже для armeabi-v7a.
Теперь можно скопировать собранные библиотеки в удобное место и снова попробовать собрать наше приложение под Android. Для этого открываем в Necessitas QtCreator наш проект-пример и добавляем к проекту зависимость от ранее скомпилированной библиотеки libqsqlmysql.so. Проще всего это сделать, добавив в *.pro-файл строчку
LIBS += -L/path/to/libs/armeabi/ -lqsqlmysql
После этого в опциях запуска приложения указываем, что необходимо закачать в эмулятор библиотеки Qt с локального компьютера.
Запускаем приложение. Если все было скомпилировано правильно, оно должно заработать:
Самое главное позади — проект успешно собран, и запускается на виртуальном устройстве.
Осталась последняя, но немаловажная часть: собрать дистрибутив приложения так, чтобы оно могло запускаться без пинка со стороны QtCreator.
К сожалению, в текущей версии necessitas имеет неприятную недоработку: дополнительные библиотеки, динамически подключаемые к приложению, не попадают в финальный дистрибутив. Обойти это можно, если зайти в каталог /path/to/project/android/res/values/ и отредактировать файл libs.xml: здесь нужно заменить массив
<array name="bundled_libs"/>
массивом следующего вида:
<array name="bundled_libs"> <item>libqsqlmysql.so</item> </array>
Поскольку приложение уже собрано, нам остаётся только положить в каталог libs означенную библиотеку, вернуться в корневой каталог проекта и отдать в консоли команду
ant clean release
После завершения сборки в подкаталоге bin каталога с проектом мы получим готовый к установке на реальное устройство apk-пакет. Аналогичным образом создаётся приложение для архитектуры armeabi-v7a.
загрузок SQL Server | Майкрософт
SQL-сервер в Azure
Запускайте SQL Server на базе Azure SQL со встроенными функциями безопасности и управляемости.
Начать
SQL Server на грани
Распространите SQL на устройства IoT для анализа в реальном времени с помощью Azure SQL Edge.
Начать
SQL Server локально
Получите производительность и безопасность SQL Server 2022, масштабируемой гибридной платформы данных, которая теперь поддерживает Azure.
Скачать сейчас
Или скачайте бесплатную специализированную версию
Разработчик
SQL Server 2022 Developer — полнофункциональная бесплатная версия, лицензированная для использования в качестве базы данных для разработки и тестирования в непроизводственной среде.
Скачать сейчас
Выражать
SQL Server 2022 Express — это бесплатная версия SQL Server, идеально подходящая для разработки и производства настольных, веб-приложений и небольших серверных приложений.
Скачать сейчас
Саммит сообщества данных PASS — гибридная конференция в Сиэтле и онлайн, 15–18 ноября. Узнать больше
Установите SQL Server 2022 в контейнерах Windows, Linux и Docker.
Окна
Запустите SQL Server в Windows или в качестве виртуальной машины в Azure
Выберите параметры установки
линукс
Запуск SQL Server 2022 в Linux
Выберите параметры установки
Докер
Запуск образа контейнера SQL Server 2022 с помощью Docker
Выберите параметры установки
Окна
линукс
Докер
Расширенная поддержка SQL Server 2012 закончилась 12 июля 2022 г. Узнайте, что это значит для вас. Учить больше
Инструменты и коннекторы SQL Server
Подпишитесь на нас
Поделиться этой страницей
загрузок Oracle SQL Developer
загрузок Oracle SQL DeveloperСожалеем. Мы не смогли найти совпадение по вашему запросу.
Мы предлагаем вам попробовать следующее, чтобы найти то, что вы ищете:
- Проверьте правильность написания вашего ключевого слова.
- Используйте синонимы для введенного вами ключевого слова, например, попробуйте «приложение» вместо «программное обеспечение».
- Начать новый поиск.
Связаться с отделом продаж
Меню МенюВерсия 22.2.1.234.1810 — 12 сентября 2022 г.
- Примечания к выпуску
- Документация
64-разрядная версия Windows с включенным JDK 11
Этот архив включает в себя SQL Developer и встроенную копию Java 11 Development Kit (JDK). Просто распакуйте zip в новый каталог и запустите sqldeveloper.exe в верхнем каталоге. EXE по умолчанию настроен на запуск встроенного JDK.
Примечание. Для запуска Windows EXE требуется MSVCR100.dll. На большинстве компьютеров этот файл уже есть в пути Windows PATH. Однако, если первая копия файла, найденная EXE, является 32-разрядной копией DLL, то SQL Developer не запустится. Это можно исправить, скопировав 64-разрядную версию DLL в каталог BIN или изменив ПУТЬ ОС, чтобы сначала была найдена 64-разрядная копия DLL.
Windows 32-разрядная/64-разрядная
Этот архив. будет работать на 32- или 64-битной ОС Windows. Уровень разрядности установленного JDK будет определять, будет ли он работать как 32- или 64-разрядное приложение. Эта загрузка не включает требуемый Oracle Java JDK. Вам нужно будет установить его, если он еще не установлен на вашем компьютере. Мы официально поддерживаем Oracle JDK 11.
Если SQL Developer не может найти Java на вашем компьютере, вам будет предложено указать путь к дому JDK. Это происходит только при первом запуске SQL Developer. Действительный Java Home в Windows будет похож на
C:\Program Files\Java\jdk-11.
Замечания по установке Windows
Для пользователей Windows доступны две загрузки.