• Qt小技巧14.Qt5.12.x编译Mysql插件驱动


    1 遇到的问题

    Qt后面的版本都没有直接带Mysql插件驱动了,应该是协议的原因,需要我们自己手动编译下,默认是这样子的:

    打印下QSqlDatabase::drivers()结果如下:

    ("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
    

    很显然,默认是不包含Mysql的插件驱动。
    如果使用QSqlDatabase::addDatabase("QMYSQL")去加载插件,就会报下面的错误:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
    

    这个错误是不是很经典,网上也有很多编译插件的教程,但是居然没有一篇文章是完全能够解决问题的,一定要综合多篇文章一起才行,所以还得要自己多动动手才行,下面我们来看看解决办法。

    2 解决办法

    2.1 下载源码

    如果安装Qt时勾选了源码,这步就可忽略,但是大多数人安装时是没有勾选的,可以自己去下载一下:

    附加地址https://download.qt.io/archive/qt/5.12/5.12.6/submodules/
    这里根据自己的版本下载即可。

    2.2 解压源码

    如果安装Qt时勾选了源码,这步也可忽略,这里只提一点,解压时一定要整个目录一起解压,不然会影响后面的配置:

    解压目录自己可以随便指定,一定要全部一起解压,我这里解压到了D:/QtPro目录下。

    2.3 打开mysql.pro工程

    首先打开工程文件:

    打开后无非会遇到下面两种错误:

    Project ERROR: Library 'mysql' is not defined.
    Cannot read D:/qtsqldrivers-config.pri: No such file or directory
    

    为了解决这个问题,接下来我们修改下配置。

    2.4 修改工程文件

    修改mysql.pro文件如下:

    这里额外提示下,如果本地没有安装mysql数据库,可以下载对应的zip包,里面有对应的头文件和库文件,例如我这里服务器的版本是mysql-5.7.9,所以我下载的版本是mysql-5.7.9-winx64.zip,并解压到了D:/Program目录下:

    然后,修改qsqldriverbase.pri文件如下:

    好了,上面提到的两个错误到这里就解决了,下面开始编译。

    2.5 编译一下

    编译完成后,会在指定的build目录下生成插件驱动:

    2.6 部署一下

    首先将编译生成的mysql插件驱动复制到sqldrivers目录下:

    然后再将Mysql驱动复制到Qt安装目录bin目录下:

    3 验证一下

    首先使用QSqlDatabase::drivers()打印下:

    ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
    

    很显然,Mysql插件驱动已经安装成功了。
    下面测试下能不能连接到数据库:

        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("192.168.10.5");
        db.setUserName("root");
        db.setPassword("123456");
        db.setPort(3306);
        qDebug() << db.open() << db.lastError().text();
    

    结果打印如下:

    好啦,搞定!此方法应该对其他版本也适用,需要自行去测试。
    最后提一下,我们编译的插件qsqlmysql.dll是依赖于Mysql驱动libmysql.dll的,两者缺一不可,插件就像是中间转换层一样,会对Mysql驱动进行适配,直接调用是不行的。

  • 相关阅读:
    iOS获取系统时间
    iOS面试-assign与retain
    iOS-检测网络可连接性
    iOS-ASI异步下载图片
    iOS-NSString值为Unicode格式(字符串编码转换成中文编码)
    iOS-模态视图动画
    iOS-UIScrollView滚动视图(转)
    iOS-NSFileManager
    iOS-self.用法
    iOS-iphone网络编程总结
  • 原文地址:https://www.cnblogs.com/luoxiang/p/15924433.html
Copyright © 2020-2023  润新知