• 11193阅读
  • 17回复

[原创]Windows下编译MYSQL驱动最简单的方法 [复制链接]

上一主题 下一主题
离线mevip
 

只看楼主 倒序阅读 楼主  发表于: 2012-10-09
关键词: mysql驱动
Open Source版本的QT不包括MySQL驱动,需要时可以自己编译生成。下面以我的开发环境为例介绍自己编译MySQL驱动的步骤。
注:我的开发环境如下:Win7+QT4.8.1+MySQL5.5.27,QT安装目录为C:\QtSDK

1、建立目录C:\cyn,将%MYSQL%\MySQL Server 5.5\目录下的include和lib目录拷贝到C:\cyn目录下,完成后如下图;

2、启动QtCreator,打开工程C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql\mysql.pro,目标设置见下图;
3、工程导入后,打开mysql.pro文件,并在最后增加两行:
INCLUDEPATH+=C:/cyn/include
LIBS += -LC:/cyn/lib/ -llibmysql
如下图:

4、分别选择调试和发布模式构建程序,即可在debug和release目录下生成相应的dll文件


5、将第四步中生成的两个dll拷贝到C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers目录下

6、将C:\cyn\lib\libmysql.dll拷贝到C:\QtSDK\Desktop\Qt\4.8.1\mingw\bin目录下

7、测试,运行下面这段程序,在应用程序输出里看到open db ok,大功告成!
#include <QtGui/QApplication>
#include "MainWindow.h"
#include <QtSql>
#include <QDebug>
void openDb()
{    
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");    
    db.setHostName("localhost");    
    db.setDatabaseName("test"); //test为Mysql中的schema名    
    db.setUserName("root");    
    db.setPassword("root");    
    bool ret = db.open();    
    if (ret)    
    {
        qDebug("open db ok");    
    }    
    else    
    {
        qDebug("open db failed");
        qDebug() << db.lastError().text();
     }
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    openDb();
    MainWindow w;
    w.show();
    return a.exec();
}
离线toby520

只看该作者 1楼 发表于: 2012-10-10
学习下,sqlite查询效率有点低,不知道是不是创建的视图有问题
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线hnqxwhz
只看该作者 2楼 发表于: 2012-11-01
此贴加精吧~简单方便,行之有效!
离线lova
只看该作者 3楼 发表于: 2012-11-04
为什么不让我找点遇到你的帖子!!!!!!
泪奔了  终于解决了
离线colin_sz

只看该作者 4楼 发表于: 2012-11-18
这个帖子没有用,不要看了,刚刚测试了俩小时,没有生成lib和DLL文件,报错为:-1: 错误:LNK1104: 无法打开文件“C:\MYSQL\MySQL.obj”
离线mevip

只看该作者 5楼 发表于: 2012-11-20
回 4楼(colin_sz) 的帖子
有什么问题,请说详细点?
离线crazybun
只看该作者 6楼 发表于: 2013-01-02
为什么 我编译出来只有.a文件?而且连不上
离线crazybun
只看该作者 7楼 发表于: 2013-01-02
原来我是静态编译。。。不能编译出DLL
离线youny
只看该作者 8楼 发表于: 2013-02-25
回 楼主(mevip) 的帖子
我按你所说的成功了,但是测试时有问题啊
E:\QTsql\MainWindow\debug\MainWindow.exe 启动中...
CDLPShareMemConfig::Close()CDLPShareMemConfig::Close()10152: tm os=6 use use vista impl
10152: Creating 2 threads
10152: on_startup
10152: tm os=6 use use vista impl
10152: on_startup
open db failed
"Can't connect to MySQL server on 'localhost' (10061) QMYSQL: Unable to connect"
10152: StopOverlappedManager: All worker threads stopped!
10152: Closing overlapped thread(s)
10152: Closing overlapped thread(s)

是不是我的还是有问题的?谢谢
离线mevip

只看该作者 9楼 发表于: 2013-03-06
检查一下数据库的用户名密码是否正确,驱动应该没问题了。
离线mevip

只看该作者 10楼 发表于: 2013-03-06
回 8楼(youny) 的帖子
检查一下你提供的数据库用户名和密码是否正确了。
离线youny
只看该作者 11楼 发表于: 2013-03-09
回 9楼(mevip) 的帖子
成功了谢谢
离线hanbugudan

只看该作者 12楼 发表于: 2013-05-03
请问楼主  我按照你的说的编译做 提示无法找到指定文档  这是什么意思 怎么解决
离线sn2ov
只看该作者 13楼 发表于: 2013-05-17

照着做结果出现这个错误。。怎么弄。。
离线ppdayz

只看该作者 14楼 发表于: 2013-05-17
回 13楼(sn2ov) 的帖子
你的编译器和mysql的库是否对应?
这篇文章用的是mingw的编译器,所以要找用mingw编译器编译的mysql的库
http://www.qtcn.org/bbs/read-htm-tid-53858.html这个是用msvc2010的,虽然用的是qt5,但是4.8也是一样的
离线sn2ov
只看该作者 15楼 发表于: 2013-05-18
我把mysql的lib和include文件夹拷过去了,是不是算对应了?
离线sn2ov
只看该作者 16楼 发表于: 2013-05-18
回 14楼(ppdayz) 的帖子
我把mysql的lib和include文件夹拷过去了,是不是算对应了。。?
离线ppdayz

只看该作者 17楼 发表于: 2013-05-18
回 16楼(sn2ov) 的帖子
你看看你qt是用什么编译器的,然后再看下mysql的库是用啥的。
如果是mingw的编译器就要libmysql.a
msvc就要libmysql.lib

还要注意是32位的编译器还是64位的
快速回复
限100 字节
 
上一个 下一个