QT5.5连接mysql5.6

19 篇文章 12 订阅

QT5.5虽然自带mysql驱动,不再需要像QT4那样自己进行编译。但是QT对mysql总归不是那么友好,在连接过程中,遇到了一坨又一坨的问题,参考了一坨又一坨的资料,用了将近一整天的时间,终于搞定了。直接上干货:

照着QT官方文档提供的方法(按F1),进行mysql数据库的连接:

  1. QSqlDatabase db = QSqlDatabase::addDatabase(“QMYSQL”);  
  2. db.setHostName(”…”);  
  3. db.setDatabaseName(”…”);  
  4. db.setUserName(”…”);  
  5. db.setPassword(”…”);  
  6. bool ok = db.open();  
  7. if(ok){  
  8.       qDebug()<<”成功连接数据库”;  
  9. }else{  
  10.       QMessageBox::warning(NULL,”警告”,“无法连接数据库”);  
  11. }  
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("...");
db.setDatabaseName("...");
db.setUserName("...");
db.setPassword("...");
bool ok = db.open();
if(ok){
      qDebug()<<"成功连接数据库";
}else{
      QMessageBox::warning(NULL,"警告","无法连接数据库");
}

“else”本来就想着意思意思,信心满满地等待着后台输出”成功连接数据库”,结果却被QT无情浇了一盆冷水:


嗯,很痛苦,再看后台输出,如下:

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

翻译一下,意思大概就是:“QMYSQL驱动加载失败”,“可用驱动有:QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL7”。

明明可用驱动中包含QMYSQL,为什么会提示加载失败呢?查看了一坨资料,总结了一下,应该是缺了加载mysql驱动时所需要的一些东西,导致加载失败。

根据网上提供的方法:将mysql安装目录中的libmysql.dll文件拷贝到QT安装目录下的bin目录中就可以了:




如上图拷贝后,继续在QT中运行源文件,结果还是会报一模一样的错误:

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

然后又试了N种方法,错误依旧。把电脑砸了的心都有了~~~~~~

冷静过后,尝试手动加载mysql驱动,QT mysql驱动在“F:\QT\5.5\mingw492_32\plugins\sqldrivers”目录下(找到自己对应的目录就好了),在主函数中添加如下代码,尝试手动加载:

  1. #include <QPluginLoader>  
  2. void loadMySqlDriver();  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     loadMySqlDriver();//实际使用中其实不需要此方法,可删除   
  8.     MainWindow w;  
  9.     w.show();  
  10.     return a.exec();  
  11. }  
  12.   
  13. void loadMySqlDriver() {  
  14.     QPluginLoader loader;  
  15.     // MySQL 驱动插件的路径  
  16.     loader.setFileName(”F:/QT/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll”);  
  17.     qDebug() << loader.load();  
  18.     qDebug() << loader.errorString();  
  19. }  
#include <QPluginLoader>
void loadMySqlDriver();

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    loadMySqlDriver();
    MainWindow w;
    w.show();
    return a.exec();
}

void loadMySqlDriver() {
    QPluginLoader loader;
    // MySQL 驱动插件的路径
    loader.setFileName("F:/QT/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll");
    qDebug() << loader.load();
    qDebug() << loader.errorString();
}
运行,后台输出如下:

false

”Cannot load library F:/QT/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll: %1 不是有效的 Win32 应用程序。”

提示无法加载,%1后面的东西是什么玩意??不是有效的Win32应用程序???难道是我32位的QT和64位的mysql起了冲突??难道QT自带驱动只能针对mysql32位的,而不能连64位的mysql??迫不及待的去试了一下,果然是这个问题。解决方法主要有以下三种:

(1)卸载当前64位的mysql,重装32为的mysql。(不推荐)

## 标题 ##

(2)下载QT源码文件,重新编译mysql驱动。(不推荐)可参考链接:https://segmentfault.com/a/1190000005691216

(3)去https://dev.mysql.com/downloads/connector/c/下载32位的zip压缩包:


解压后得到libmysql.dll,将其复制到“F:\QT\5.5\mingw492_32\bin”(视自己情况而定)目录即可:


打开QT,运行,终于看到后台输出:












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值