21 апреля 2014 г.

Установка драйвера для работы с базой данных MySQL

    Вы уже познакомились с Qt, знаете что такое сигнал и слот, написали уже несколько программ, и вот решили подключиться к запущенной и настроенной БД MySQL, и обнаружили что "из коробки" такая возможность отсутствует, а в Qt по умолчанию имеется поддержка только:
    Примечание:
    1. Это можно узнать вызвав статический метод QSqlDatabase::drivers()или запустив этот проект (взят отсюда).
    2. Для библиотеки Qt5.x.x будет другой результат (например, для Qt5.2.1 он такой), хотя просто так работать все равно не будет.


    Следовательно для работы с MySQL надо раздобыть где-нибудь этот драйвер. Варианта два:
1. Собрать самому.
2. Использовать уже готовый.
    Примечание:
    Для библиотеки Qt5.x.x требуется лишь скопировать библиотечный файл по необходимому пути (см. пункт 9).


    Если самостоятельно собирать их нет желания, то переходим к концу пункта 7.
    Я же опишу полный процесс компиляции драйвера MySQL и выложу результаты (готовые драйвера).

    Для начала, что у нас уже имеется (или уточним пути):
1. Библиотека Qt 4.8.5 установлена в: C:\Qt\4.8.5
2. MinGW установлен в C:\Qt\MinGW
3. Qt Creator 3.0.1 установлен в C:\Qt\Creator3

    Последовательность действий:

1. Скачиваем исходники библиотеки Qt: qt-everywhere-opensource-src-4.8.5.zip (269 MB)
2. Переносим папку qt-everywhere-opensource-src-4.8.5 и все ее содержимое из скачанного архива в папку C:\tmp. Переименуем qt-everywhere-opensource-src-4.8.5 в src4.
3. Теперь необходимо раздобыть include и lib от MySQL версии 5.5 или 5.1 (для версии 5.6 почему-то не компилируются). В том, какую версию использовать - решать вам. Я разницы не заметил (драйвер скомпилированный с include и lib от MySQL 5.1 прекрасно работает с сервером MySQL 5.5).
    Официально все берется тут. Но чтобы не возиться с установкой, я предлагаю скачать отдельно только необходимые нам файлы.
    Для MySQL 5.5 скачиваем этот архив (mirror1, mirror2)
    Для MySQL 5.1 скачиваем этот архив (mirror1, mirror2)
4. Переносим папку mysql из скачанного архива в C:\tmp
5. Запустим Qt 4.8.5 Command Prompt
6. Перейдем в следующий каталог из данного командного интерпретатора следующей командой:
cd /d C:\tmp\src4\src\plugins\sqldrivers\mysql
7. Выполним следующие команды:
  • Для MySQL 5.1
qmake "INCLUDEPATH+=C:\\tmp\\mysql\\include" "LIBS+=C:\\tmp\\mysql\\lib\\opt\\libmysql.lib" mysql.pro
make
qmake "INCLUDEPATH+=C:\\tmp\\mysql\\include" "LIBS+=C:\\tmp\\mysql\\lib\\opt\\libmysql.lib" mysql.pro "CONFIG+=release"
make
  • Для MySQL 5.5
qmake "INCLUDEPATH+=C:\\tmp\\mysql\\include" "LIBS+=C:\\tmp\\mysql\\lib\\libmysql.lib" mysql.pro
make
qmake "INCLUDEPATH+=C:\\tmp\\mysql\\include" "LIBS+=C:\\tmp\\mysql\\lib\\libmysql.lib" mysql.pro "CONFIG+=release"
make
    У меня получился такой результат выполнения этих команд. Строки Creating library file: debug\libqsqlmysqld4.a и Creating library file: release\libqsqlmysql4.a означают, что драйвера создались успешно.
    В результате нам нужны два файла libqsqlmysqld4.a и qsqlmysqld4.dll из папки debug и два файла libqsqlmysql4.a и qsqlmysql4.dll из папки release.
    Вот эти файлы скомпилированные мной:
    для MySQL5.1 (mirror1, mirror2)
    для MySQL5.5 (mirror1, mirror2)

8. Скопируем полученные файлы драйверов командами:
copy .\debug\libqsqlmysqld4.a C:\Qt\4.8.5\plugins\sqldrivers
copy .\debug\qsqlmysqld4.dll C:\Qt\4.8.5\plugins\sqldrivers
copy .\release\libqsqlmysql4.a C:\Qt\4.8.5\plugins\sqldrivers
copy .\release\qsqlmysql4.dll C:\Qt\4.8.5\plugins\sqldrivers
9. Скопируем библиотечный файл MySQL (так же его можно скачать тут: от MySQL5.1 (mirror1, mirror2) или от MySQL5.5 (mirror1, mirror2)):
copy C:\tmp\mysql\lib\libmysql.dll C:\Qt\MinGW\bin
а для Qt5.2.1 будет следующий путь:
copy C:\tmp\mysql\lib\libmysql.dll C:\Qt\5.2.1\5.2.1\mingw48_32\bin
Возможно в новых версиях будут иные пути, главный закон по расположению этого файла - он должен быть в каталоге указанном в системной переменной PATH.
10. Всё, драйвера установлены. Можно проверить запустив этот тестовый проект. Результат:

    Как видите, появилась поддержка QMYSQL и QMYSQL3.
    Папку C:\tmp и все её содержимое можно удалить.

Используемый и полезный материал:
Create MySQL driver for Qt on Windows _ Seppe Magiels
Qt и SQLite и вообще, программирование БД в Qt _ Хабрахабр
QT и Базы данных — openSUSE
Qt 4.5 Драйверы баз данных SQL _ Документация
Вопрос - Ответ для новичков по Qt - Страница 3 - Qt - CyberForum.ru
Чтобы не забыть... - Драйвера баз данных в QT
Qt и MySQL - Форум на CrossPlatform.RU
Сборка библиотек драйвера MySQL - Qt - CyberForum.ru
драйверы_баз_данных_sql [Qt - поменьше программируй, побольше отдохни.]

При копировании статьи просьба указывать источник и автора.
С уважением, GRomR1.

2 комментария:

  1. Для Qt4.8.6 эти скомпилированные мной драйвера не подходят

    ОтветитьУдалить
  2. Спасибо за готовые модули, вставил их в нужные места и заработало. Версия Qt 5.8

    ОтветитьУдалить