一、必须知道的一些常识
1、Qt5自带mysql数据库驱动的,而Qt4如果要进行mysql数据库操作,需要自己编译mysql数据库驱动
2、Qt安装完之后是自带两个关于mysql文件夹的,比如说我的安装目录
D:\Qt\4.8.6\src\plugins\sqldrivers\mysql,里面包含三个文件mysql.pro、main.cpp、README,
编译mysql驱动其实就是编译里面的mysql.pro项目
D:\Qt\4.8.6\plugins\sqldrivers这个目录存放已经编译好的.a和.dll文件
3、注意编译器一定要和MYSQL的平台版本一致,32位的mysql用32位的编译器编译,
64位的mysql用64位的编译器编译。
因为我的Qt是32位的,所以我在此提供32位的mysql下载地址:
http://download.csdn.net/detail/bladeandmaster88/9668220
mysql安装方法http://jingyan.baidu.com/article/647f011591f1eb7f2148a81a.html
如果你是32位的Qt却下载64位的mysql来编译会出现各种链接错误,比如:
undefine reference to mysql_error
undefine reference to mysql_errno
………….
二、编译mysql
到mysql的安装目录C:\ProgramFiles (x86)\MySQL\MySQL Server 5.5,把里面的include文件夹和lib文件夹,把他们复制后,
在d盘建一个”mysql5.5”的文件夹,把include和lib放进去如下图,因为mysql的安装目录路径有空格,
include和lib里面的头文件和库在编译的时候找不到,所以需要重新建一个路径存放include和lib,
让编译器能够识别其路径,找到里面的头文件和库。
方法一:直接用Qt编译
用Qt打开D:\Qt\4.8.6\src\plugins\sqldrivers\mysql中的mysql.pro项目
在mysql.pro中加入3行代码(红色部分)
TARGET =qsqlmysql
SOURCES =main.cpp
INCLUDEPATH += d:/mysql5.5/include
LIBS += d:/mysql5.5/lib/libmysql.lib
CONFIG += bulid_all
include(../../../sql/drivers/mysql/qsql_mysql.pri)
include(../qsqldriverbase.pri)
注意:
1、红色代码一定要在绿色两行代码之前,否则出现error: cannot find –llibmysql,
2、INCLUDEPATH +=d:/mysql5.5/include
LIBS += d:/mysql5.5/lib/libmysql.lib
这两句是为了找到include头文件和 lib库
3、CONFIG += bulid_all是为了一次性就能同时生产release版和debug版的库
直接点击运行按钮,编译结果如图:
把debug和release里面生成的libqsqlmysql4.a,libqsqlmysqld4.a, qsqlmysql4.dll,qsqlmysqld4.dll 四个文件
拷贝到D:\Qt\4.8.6\plugins\sqldrivers,还必须将D:\mysql5.5\lib下的libmysql.dll拷贝到D:\Qt\4.8.6\bin。
测试:
#include<QCoreApplication>
#include<QSqlDatabase>
#include<QDebug>
#include<QStringList>
intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);
qDebug()<<"Availabledrivers:";
QStringListdrivers=QSqlDatabase::drivers();
foreach(QStringdriver,drivers)
qDebug()<<"\t"<<driver;
returna.exec();
}
输出结果:
Availabledrivers:
"QSQLITE"
"QMYSQL3"
"QMYSQL"
"QODBC3"
"QODBC"
输出了"QMYSQL3" "QMYSQL"说明mysql驱动已经编译好
方法二:使用Qt Command Prompt 编译
在mysql.pro中加入2行代码(红色部分)
TARGET =qsqlmysql
SOURCES =main.cpp
INCLUDEPATH += d:/mysql5.5/include
LIBS += d:/mysql5.5/lib/libmysql.lib
include(../../../sql/drivers/mysql/qsql_mysql.pri)
include(../qsqldriverbase.pri)
打开Qt CommandPrompt 窗口
输入命令:cd d:\Qt\4.8.6\src\plugins\sqldrivers\mysql
输入命令 qmake
输入命令make all
三、知识点补充
参照博客http://blog.csdn.net/bladeandmaster88/article/details/52974403
此文word版http://download.csdn.net/detail/bladeandmaster88/9668396
用qt4.8.6编译好的mysql5.5驱动 下载地址
http://download.csdn.net/detail/bladeandmaster88/9668399
注意:qt和mysql的位数要一一对应,也就是32位对应32位,64位对应64位,编译驱动才没有问题,已经尝试qt32位对应mysql64位是编译驱动失败,qt64位对mysql32位没有试过
客户跟服务器是 socket 通讯, 跟 32/64 无关,故32位的驱动能连接64位的数据库