解决QMYSQL driver not loaded问题
前言
操作环境windows server2012+vs2010+qt4.8.7
使用QtSqlDatabase时出现如下的提示,代表当前使用的QSqlDatabase没有mysql的驱动。解决办法有两种,一种是网上下载别人编译好的库文件,放到指定的目录下,可以点击此处下载我编译好的插件库(下载后按照下述的步骤三进行部署);另一种是自己编译mysql的插件,下面我就来讲一下怎么编译和部署插件。
如何编译mysql插件
一、编译准备
需要如下两部分文件:
- qt源代码(安装qt的时候选择了安装源代码选项那么在qt的安装路径下就会有)
- mysql的库文件及头文件(同样也是安装mysql时选装的),如果未安装可以[点击此处下载]。(https://downloads.mysql.com/archives/c-c/)
二、编译
- 进入到qt源码的mysql插件目录(我的目录在D:\Qt\4.8.7\src\plugins\sqldrivers\mysql)
- 修改目录下mysql.pro文件增加mysql依赖库以及头文件路径,修改后的文件如下
TARGET = qsqlmysql
#下面这两个需要设置成前面编译准备中的mysql库文件和头文件的路径
INCLUDEPATH += D:/mysqldev/include
LIBS += D:/mysqldev/lib/libmysql.lib
SOURCES = main.cpp
include(../../../sql/drivers/mysql/qsql_mysql.pri)
include(../qsqldriverbase.pri)
- 执行qmake和nmake(如果不是使用msvc那么用make指令替代)
三、部署
- 插件部署
编译完成后产生的文件如下,qsqlmysql4.dll和qsqlmysql4.lib,此处我编译的是release版本。
将上述的两个文件,拷贝到qt的插件目录(D:\Qt\4.8.7\plugins\sqldrivers,根据自己的安装位置修改目录的前缀)下
- mysql库部署
将第二步编译步骤中使用到的libmysql.dll库拷贝到qt的bin目录(D:\Qt\4.8.7\bin)下
四、测试
- 示例
#include <QtSql>
#include <qdebug.h>
#include <QtCore/QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setUserName("root"); //替换为测试数据库的用户名
db.setPassword("123"); //替换为测试数据库的密码
db.setHostName("127.0.0.1"); //替换为测试数据库的IP地址
db.setPort(3306); //替换为测试数据库的端口
db.setDatabaseName("mysql"); //要访问的数据库为mysql
qDebug()<<db.open(); //打印数据库连接信息
qDebug()<<db.databaseName(); //打印当前使用的数据库名称
qDebug()<<db.tables(); //打印当前使用的数据库下所有的表
return a.exec();
}
- 运行结果
成功连接到了mysql,打印出mysql数据库的所有表。