如何在 Qt 中设置嵌入式 MySQL 客户端

Posted

技术标签:

【中文标题】如何在 Qt 中设置嵌入式 MySQL 客户端【英文标题】:How do I set up a embedded MySQL client in Qt 【发布时间】:2016-12-22 05:39:44 【问题描述】:

我正在尝试将我的 embedded Linux 机器设置为 mysql 客户端,以便连接到外部 MySQL 服务器(在远程机器上运行)。 sqlite 不是一个选项。

我明白了,感谢Basile Starynkevitch,我必须使用libmysqlclient(因为这是唯一一个运行这种连接并在客户端处理 MySQL 客户端/服务器协议的库)。

Qt 统计:

您需要 MySQL 头文件以及共享库 libmysqlclient.so。根据您的 Linux 发行版,您可能需要 安装一个通常称为“mysql-devel”的包。

有人这样做并且可以指出正确的包裹吗?

【问题讨论】:

在你的情况下考虑使用sqlite。 为什么需要使用已弃用的libmysqld(不再受支持)?你应该解释一下。或者为什么不能在嵌入式 Linux 系统中启动mysqld 进程? 如果你需要连接到一些external MySQL服务器(运行在remote机器上)你必须使用libmysqlclient;它是唯一知道连接到 external mysqld 的协议的库。换句话说,您应该编辑您的问题来解释“外部 MySQL 服务器”是什么意思(因为 libmysqld 不使用任何 外部 服务器)跨度> 【参考方案1】:

是的,假设您要做的是使用 QtSql API 访问 MySQL 数据库,而无需连接到外部 MySQL 服务器。使用嵌入式服务器库,服务器在与客户端 Qt 应用程序相同的进程中运行,类似于 SQLite 的工作方式。

但有一个警告:libmysqld 嵌入式服务器库自 MySQL 5.7.17 起已弃用,并将在 MySQL 8.0 中删除。 (如http://dev.mysql.com/doc/refman/5.7/en/libmysqld.html 中提到的)

【讨论】:

【参考方案2】:

您的问题令人困惑,似乎自相矛盾。

您要么希望使用外部 MySQL 服务器,这意味着您的应用程序打开一个(tcp(7) 套接字)连接到某个运行mysqld 的远程机器。然后你必须使用libmysqlclient(因为这是唯一运行这种连接并在客户端处理MySQL client/server protocol的库)。

如果mysqld 服务器在同一个嵌入式Linux 系统上作为不同的进程运行,你应该有一些方法来启动它(可能作为@的一部分) 987654329@ 脚本)。然后你仍然使用与它的套接字通信,你仍然需要libmysqlclient。与运行mysqld 的远程机器的可能区别可能是(但我不确定)套接字系列。在连接到同一台机器上的服务器的特殊情况下,libmysqlclient 可能正在使用unix(7) 套接字。

或者您不想要任何外部服务器。您可能会考虑libmysqld,但作为Romain answered,它已被弃用并且不受支持(所以我觉得这将是一个非常糟糕的选择)。然后所有的数据库代码都在你的嵌入式 Linux 计算机上运行,​​它也有所有的数据存储。在这种情况下(关系数据库、数据和存储在同一台嵌入式 Linux 计算机上),我建议改用 sqlite,因为它得到了很好的支持并且非常稳定。

如果您的mysqld 守护程序在远程机器上运行,您无法(实际上)避免使用libmysqlclient(否则您将需要重写大部分内容)。

【讨论】:

【参考方案3】:

我最终做了以下事情:

    在我的嵌入式 Linux 上安装 MySQL 并使用它进行测试

    mysql --host=1.2.3.4 --user=Foo --password=FooPass testdb
    

    当 MySQL 服务器在 1.2.3.4 上运行时。

    我用-sql-mysql选项重新编译了Qt,所以新编译的版本将包含Qt MySQL插件。

    用下面的代码测试是否支持 Qt MySQL 插件:

    QStringList driverslist =  QSqlDatabase::drivers();
    QString str;
    foreach (str, driverslist)  qDebug() << str 
    

    预期输出是:

    QMYSQL3
    QMYSQL
    

    使用下一个代码测试该驱动程序是否按预期加载:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("1.2.3.4");
    db.setDatabaseName("TestDB");
    db.setUserName("Foo");
    db.setPassword("FooPass");
    
    bool ok = db.open();
    if(ok)
    
        // "Connected"
    
    

【讨论】:

以上是关于如何在 Qt 中设置嵌入式 MySQL 客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2010 中设置 Qt 路径?

如何在qt中设置.exe文件的属性?

如何使用命令行在窗口 10 中设置 Qt5 静态

如何在 ui 文件 QT 中设置图像,例如 QPushButton?

如何在 Qt 中设置按钮背景颜色,甚至覆盖平台主题?

如何在 Symbian 上的 QT 中设置应用程序图标?