在网上找了很多在qt中编译mysql的资料,写的都很复杂,一会安装,一会命令行,很多都用到mingw32。今天研究了一下,其实并不复杂,方法如下:
一、开发环境:
二、编译步骤:
1. 参照Qt助手 How to Build the QMYSQL Plugin on Windows 里的说明,在cmd窗口,输入以下命令查看路径:
cd %QTDIR%\src\plugins\sqldrivers\mysql
显示路径为:C:\Qt\4.8.4\src\plugins\sqldrivers\mysql
2. 打开上一步查看到的路径,可以看到mysql目录下有:mysql.pro,main.cpp,README,用记事本打开mysql.pro文件,添加mysql的头文件和lib库路径,修改后的mysql.pro文件如下:
TARGET = qsqlmysql
INCLUDEPATH += "D:/Program Files/mysql-5.6.13-win32/include"
LIBS += "D:/Program Files/mysql-5.6.13-win32/lib/libmysql.lib"
SOURCES = main.cpp
include(../../../sql/drivers/mysql/qsql_mysql.pri)
include(../qsqldriverbase.pri)
3. 在mysql目录下新建文件夹build,打开Qt命令行,输入cd C:\Qt\4.8.4\src\plugins\sqldrivers\mysql\build,然后qmake -tp vc ..\mysql.pro,在build目录生成vs2010工程
4. 编译mysql/build目录下的VS2010工程mysql.sln,生成debug和release库:qsqlmysqld4.dll,qsqlmysqld4.lib,qsqlmysql4.dll,qsqlmysql4.lib,将这4个文件拷贝到C:\Qt\4.8.4\plugins\sqldrivers目录下,mysql插件编译结束
5. 编写测试程序,如下,却提示driver not loaded
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QMYSQL", strConnection1);
db.setHostName(QObject::tr("localhost"));
db.setDatabaseName(QObject::tr("test"));
db.setUserName(QObject::tr("root"));
db.setPassword(QObject::tr(""));
if ( !db.open() )
{
QSqlError error = db.lastError();
qDebug() << "Failed to connect to root mysql admin: " << error.databaseText();
}
else
{
qDebug() << "available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
{
qDebug() << "\t" << driver;
}
}
6. 解决driver not loaded错误的方法,将D:\Program Files\mysql-5.6.13-win32\lib\libmysql.dll拷贝到C:\Qt\4.8.4\bin目录,一切OK!