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

时间:2016-12-22 05:39:44

标签: linux qt embedded

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

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

Qt统计数据:

  

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

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

3 个答案:

答案 0 :(得分:3)

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

但有一点需要注意:自MySQL 5.7.17起,libmysqld嵌入式服务器库已弃用,将在MySQL 8.0中删除。 (如http://dev.mysql.com/doc/refman/5.7/en/libmysqld.html所述)

答案 1 :(得分:2)

你的问题很混乱,似乎很矛盾。

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

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

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

如果您的mysqld守护程序在远程计算机上运行,​​则您(实际上)无法避免libmysqlclient(否则您需要重写大部分守护程序)。

答案 2 :(得分:0)

我最终做了以下事情:

  1. 在我的嵌入式Linux上安装MySQL并使用

    进行测试
    mysql --host=1.2.3.4 --user=Foo --password=FooPass testdb
    

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

  2. 我使用-sql-mysql选项重新编译了Qt,因此新编译的版本将包含Qt MySQL插件。

  3. 测试下一个代码是否支持Qt MySQL插件:

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

    预期输出为:

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

    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"
    }