• 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

  • 相关阅读:
    例6-5
    例6-3
    例6-2
    例6-1
    例5-9
    python3
    python3
    python3
    python3
    python3
  • 原文地址:https://www.cnblogs.com/zhaotian/p/5790068.html
Copyright © 2020-2023  润新知