QT连接MySQL

Qt 连接MySQL 是件很简单的事,但也有可能很不简单。

QT给我们的提示只有 QMYSQL driver not loaded,让我们毫无头绪。访问其他数据库也可以用同样的方法解决。

Qt 访问 MySQL 需要 2 个动态链接库文件,一个是 Qt 自己的 MySQL 驱动插件,另一个是 MySQL 提供的动态链接库,缺一不可。在程序里指定要访问的数据库为 MySQL,Qt 会自动的加载 MySQL 驱动插件,其实现依赖于MySQL 的动态链接库访问 MySQL。

#include <iostream>
#include <QSqlDatabase>

#include <QDebug>
using namespace std;
int main()
{
    QSqlDatabase d = QSqlDatabase::addDatabase("QMYSQL");
    d.setHostName("127.0.0.1");
    d.setDatabaseName("dbName");
    d.setPort(3306);
    d.setUserName("root");
    d.setPassword("root");
    if(d.open())
        cout<<"Hi mysql!连接"<<endl;
    else
        cout<<"失败"<<endl;
    qDebug()<<QSqlDatabase::drivers()<<endl;
    return 0;
}

运行上面的代码,QT只给我们驱动没有加载的提示。Qt 5 的 SDK 默认提供了编译好的 MySQL 驱动插件,位于 plugins/sqldrivers(Mac OS 下为 libqsqlmysql.dylib,Windows 下为 qsqlmysql.dll),这个可以直接使用。但如果用的是 Qt 4,很不幸, 需要我们自己编译 MySQL 的驱动插件,而且不同的系统,不同的编译器中步骤有所区别,需要相当大的篇幅才能讲清楚。接下来还需要MYSQL的动态链接库:

 1 #include <QSqlDatabase>
 2 #include <QSqlQuery>
 3 #include <QSqlError>
 4 #include <QPluginLoader>
 5 #include <QDebug>
 6 
 7 void loadMySqlDriver();
 8 
 9 int main(int argc, char *argv[]) {
10 
11     loadMySqlDriver();
12     return 0;
13 }
14 
15 void loadMySqlDriver() {
16     QPluginLoader loader;
17     // MySQL 驱动插件的路径
18     loader.setFileName("/Users/Stdu/Qt5.6.1/5.6/clang_64/plugins/sqldrivers/libqsqlmysql.dylib");
19     qDebug() << loader.load();
20     qDebug() << loader.errorString();
21 }

执行上面的代码,终于能看到问题出在哪里,需要opt/..../libmysqlclient.18.dylib这个动态链接库。

我的MYSQL是5.7,其中包含的动态链接库是libmysqlclient.20.dylib,但我想了想这个库就是连接MYSQL的关键所在,将其改名为libmysqlclient.18.dylib,放在opt/.../下。连接成功。

参考:http://qtdebug.com/DB-AccessMySQL.html

转载于:https://www.cnblogs.com/zhaotian/p/5790068.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值