环境:win10 64位系统,QT5.5.1 32位,MySQL5.7.1 32位,vs2010,vsaddin1.2.5
1.第一步:到qt官网下载安装包,下载链接(百度输入qt download即可转到链接) 选择5.5.1,注意要和你安装的vs版本匹配。
安装QT的时候一定要记得把源码也选上,默认的安装里是没有的,所以要自己选上,否则后面编译mysql的时候还需要从qt官网单独下载,解压到D盘根目录(位置随意,只是目录层级太多,解压到盘符根目录方便点)
然后找到vsaddin下载
登录mysql官网下载mysql官网
进入下载页面后,最下面一般是最新的mysql版本,有zip和msi两种可供选择,如果要找老版本,往上找,有一个Looking for previous GA version?
msi是傻瓜式的那种界面安装,zip要解压并手动写.ini文件配置还有dos敲命令(这个网上很多教程),我选择msi安装,比较简单省事。
安装mysql需要注意,Filter点开有any,32bit,64bit,选择32bit,如果选择以后发现mysqlserver出不来,就说明你下载的mysql不是32位的!需要重新下载。(这里为了和qt的32位版本保持一致,所以必须下载32位的mysql才能编译驱动不然到时候出一堆错)
之后就是需要修改mysql server的安装路径和数据路径(编译驱动时路径不能有空格,否则会报找不到mysql.h之类的错误,默认安装路径是有空格的需要修改),把鼠标放在蓝色字体上面点击一下,advanced option高级设置选项就出现在右下角,点击就可以修改了,修改路径会有警告,不用理它,不影响安装。(因为我已经安装过了,这里就是示范一下,都一样的)
然后就是按照网上教程里那样下一步下一步点击就好。
2.第二步,准备工作就绪,就可以开始编译了。
- 进入开始菜单,QT5.5.1–>5.5–>MSVC 2010(32-bit)–>命令框。如下
- 进入QT的src的mysql.pro所在的目录 C:\QT\Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\mysql
如果没有就第一步说的下载opensource src,进入 D:\qt-everywhere-opensource-src-5.5.1\qtbase\src\plugins\sqldrivers\mysql
(注意:盘符不同时,先d: 切换盘符,再cd 进入目录,复制粘贴路径)
执行 qmake “INCLUDEPATH+=C:\MySQL_Server_5.7\include” “LIBS+=C:\MySQL_Server_5.7\lib\libmysql.lib” -o Makefile mysql.pro
注意:-o Makefile可写可不写
- 开始菜单–vs2010目录–vs tools–vs命令提示符框
进入mysql.pro所在目录(方法同上),执行nmake即可。
- 如果执行过程没有报错,就是这个样子,代表编译ok了。
编译成功后mysql.pro这个文件夹会生成3个Makefile文件。
- 接下来说编译错误情况:
1.找不到mysql.h 这个是执行qmake时includepath路径存在空格或者路径出错导致。仔细检查下。
2 mysql.h这个问题解决后不报错了,紧接着报确实stdbool.h,你从网上找了下载放到路径里,结果发现报错更多了,都是语法错误,什么缺少分号,-不是int类型等等的错。
不用编译了。说明你下载的mysql和你的qt版本不匹配!!!!!
3.第三步,编译成功以后,配置环境,检测
- 把D:\qt-everywhere-opensource-src-5.5.1\qtbase\plugins\sqldrivers下生成的qsqlmysql.dll 和 qsqlmysqld.dll复制到 C:\QT\Qt5.5.1\5.5\msvc2010\plugins\sqldrivers下面替换原来不能用的驱动。
- 把C:\MySQL_Server_5.7\lib 目录下的libmysql.dll 和 libmysql.lib 复制到 C:\QT\Qt5.5.1\5.5\msvc2010\bin 目录下即可。
4. 代码测试
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
testConnMysqlMainWindow w;
w.show();
//QPluginLoader loader;
//loader.setFileName("C:\QT\Qt5.5.1\5.5\msvc2010\plugins\sqldrivers\qsqlmysql.lib");
//qDebug() << loader.load(); //手动加载驱动竟然失败了,但是数据库已经打开并且连接上了,不知道为什么
//qDebug() << loader.errorString();
if(!QSqlDatabase::drivers().contains("QMYSQL"))
qDebug() << "unload driver";
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("test"); //数据库的名字不是连接的名字
db.setUserName("用户名");
db.setPassword("密码");
if(db.open())
qDebug() << "open success";
else
qDebug() << db.lastError();
return a.exec();
}
完