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

posted @ 2016-08-20 11:38  赵天  阅读(24633)  评论(0编辑  收藏  举报