qt 与mysql连接出现如下问题:
centos redhat windows
QSqlDatabase: QMYSQL driver not loaded
qtsqldriver-config.pri:no such file or directory
library mysql is not fefined
1、qt 连接mysql数据代码如下:
QSqlDatabase db_mysql = QSqlDatabase::addDatabase("QMYSQL"); db_mysql.setDatabaseName("student"); db_mysql.setHostName("10.15.21.94"); db_mysql.setPort(3306); db_mysql.setUserName("root"); db_mysql.setPassword("root");
2、然后qt版本升级后(本人在使用qt5.14.2),发现连接不上了
执行代码 : QSqlDatabase db_mysql = QSqlDatabase::addDatabase("QMYSQL");
的时候提示:QSqlDatabase: QMYSQL driver not loaded
3、原来是新版本qt里面没有了mysql的库,需要自己编译,编译方法如下:
- 安装mysql(和qt编译目标位数保持一致,我用的:mysql-5.5.8-winx64.msi)
- 安装qt(qt-opensource-windows-x86-5.14.2.exe),安装的时候勾选 src。
- qt打开项目:C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql,修改mysql.pro文件,修改后如下:
TARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.hSOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cppOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPluginLIBS += "C:\Program Files\MySQL\MySQL Server 5.5\lib\libmysql.lib"INCLUDEPATH +="C:\Program Files\MySQL\MySQL Server 5.5\include"include(../qsqldriverbase.pri)
4、构建项目
本人(设置mingw73_64),构建后在目录下 C:\plugins\sqldrivers 下生成有 qsqlmysql.dll, 把qsqlmysql.dll拷贝到
C:\Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers
5、把qt库文件 “C:\Program Files\MySQL\MySQL Server 5.5\lib”目录下 的
libmysql.dll, libmysql.lib,libmysql.pdb 三个文件拷贝到执行目录下(把 C:\Program Files\MySQL\MySQL Server 5.5\lib 配置到环境变量中也可以)。
下面,连接数据库就ok了。
5、注意事项(经验只谈)
1、qt的qt编译目标位数要和mysql位数保持一致。
2、自己编译mysql库的时候, 要选择正确的kits, 如mingw 或者 msvc* 等。否则还是链接不上数据库。
centos linux操作系统 qt 编译mysql
编译需要如下准备:
1、qt的安装要安装源代码, mysql驱动项目代码位置: /Src/qtbase/src/plugins/sqldrivers/mysql
2、安装mysql服务,centos7默认有自带
3、修改mysql.pro文件
源文件:
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
修改后文件:
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql #
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#下面对应mysql实际安装位置
INCLUDEPATH+=/usr/include/mysql
LIBS+= -L/usr/lib64/mysql -lmysqlclient_r
然后编译,可能出现问题:
Cannot read /qtsqldrivers-config.pri:
解决这个问题,需要:
1、 /Src/qtbase/src/plugins/sqldrivers下找到文件文件 qsqldriverbase.pri文件,把 qtsqldrivers-config.pri这一行注释掉,修改为 configure.pri即可。
编译后,编译的目标默认位置在根目录下 plugins/sqldrivers/libqsqlmusql.so
收集
linux qt下 QSqlDatabase: QMYSQL driver not loaded
出现上述问题是qt安装目录未包含mysql驱动。
解决方法如下:
1.查看系统是否存在libqsqlmysql.so
find / -name libqsqlmysql.so
2.若不存在该文件则安装qt-mysql文件
yum list |grep qt-mysqlyum install qt-mysql.i686
3.此时在/usr/lib/qt4/plugins/目录下应该有文件libqsqlmysql.so,将其拷贝到qt安装目录
cp /usr/lib/qt4/plugins/libqsqlmysql.so /usr/local/Trolltech/Qt-4.8.6/plugins/sqldrivers/
即可。
收集
CentOS7 qt5.12.10 qt5.13.2 qt5.14
有的版本的 qt 中没有了mysql的支持,缺少libmysql.so ,需要自己下载对应版本的源代码编译 (src/qbase/src/plugins/sqldrivers)。 但是在编译的时候遇到问题 mysql is not defined; 这时候需要 yum -y mysql-devel,
参考:You need the MySQL / MariaDB header files, as well as the shared library libmysqlclient.so
/ libmariadb.so
. Depending on your Linux distribution, you may need to install a package which is usually called "mysql-devel" or "mariadb-devel".