8

如何qmysql在 Qt 中加载驱动程序?我有以下代码产生这些结果:

("QSQLITE", "QMYSQL", "QMYSQL3") 
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3

关于如何加载它的任何建议?

4

9 回答 9

12

我们应该先检查我们的驱动程序

$ cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers

然后我们可以找到一些文件

使用以下命令检查库

$ ldd libqsqlmysql.so

如果您发现问题libmysqlclient_r.so.16 => not found,则可能是库依赖问题。

在我在互联网上做了一点研究之后,有一种方法很简单。

$ cd /usr/lib/x86_64-linux-gnu

如果你发现libmysqlclient_r.so.18

$ cp libmysqlclient_r.so.18 libmysqlclient_r.so.16
于 2014-04-07T19:37:10.530 回答
4

好的,只需将sqldrivers文件夹复制到我的调试文件夹就可以了!

于 2013-02-06T14:26:44.203 回答
2

您可以尝试诊断问题strace- 似乎 QMYSQL 驱动程序可能需要一些运行时库依赖项才能工作。

于 2013-02-02T23:47:51.917 回答
2

在 Windows 上(参见目录结构):

the_qt_app.exe
libmysql.dll
sqldrivers/qsqlmysql4.dll
于 2013-09-30T16:36:53.390 回答
1

您可以使用QPluginLoader来获得一些更好的错误消息。

当我遇到与 MySQL 驱动程序相同的问题时,消息类似于“该版本是使用此 Qt 版本以外的其他选项编译的”。

当时与 Qt SDK 一起提供的 Qt 源代码似乎与其二进制文件不兼容。

下载 Qt 源代码并编译我自己的 Qt 版本和 MySQL 驱动程序后,问题就消失了。

编辑:一些示例代码。

QPluginLoader loader;
loader.setFileName("/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib");
qDebug() << loader.load();
qDebug() << loader.errorString();

loader.setFileName("/Users/niklaswulf/QtSDK/Qt/5.0.1/5.0.1/clang_64/plugins/sqldrivers/libqsqlite_debug.dylib");
qDebug() << loader.load();
qDebug() << loader.errorString();

针对 5.0.1 进行编译时,输出如下:

false 
"The file '/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib' is not a valid Qt plugin." 
true 
"Unknown error"

我还找到了旧消息:

The plugin '/path/to/some/libqsqlmysql.dylib' uses incompatible Qt library. Expected build key "macosx macx-cocoa g++-4 full-config", got "macosx macx-cocoa g++-4 no-pkg-config"
于 2013-02-03T20:28:38.767 回答
1
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3

我在使用 Qt-5.2.0 的 fedora20(64 位)中遇到了同样的问题,然后按照以下步骤操作:

$ cd /opt/Qt5.2.0/5.2.0/gcc_64/plugins/sqldrivers
$ ls
libqsqlite.so  libqsqlmysql.so

使用以下命令检查库依赖关系:

$ ldd libqsqlmysql.so

我发现问题:

libmysqlclient_r.so.16 => not found 

这可能是库依赖问题。所以解决这个问题:

链接库文件:

 $ ln -s libmysqlclient_r.so.16.0.0        libmysqlclient_r.so

然后再次:

$ ln -s libmysqlclient_r.so.16.0.0         libmysqlclient_r.so.16

现在它为我工作。祝一切顺利

于 2016-02-27T05:14:13.317 回答
1

遇到了同样的问题,谷歌的一些研究和直觉终于解决了它。使用 Qt5.9.1 和 Ubuntu 17.10

首先,检查是否存在libmysqlclient.so.18 => not found错误

    :~/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so

二、搜索libmysqlclient在哪里

    :/$ locate libmysqlclient 

第三,转到 libmysqlclient 所在的文件夹并在那里创建链接

    :/usr/lib/x86_64-linux-gnu$ sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18

并检查之前制作的链接

    ls -alh | grep libmysql

在那一刻,这些都没有为我解决,我决定进一步查看突触包,并意识到libqt5sql5-mysql没有安装 5.9.1 版本,所以安装它解决了问题,但我在做 ldd 时仍然有一条消息

./libqsqlmysql.so:/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:找不到版本“libmysqlclient_18”(./libqsqlmysql.so 需要)

在那之后,找到了一些指导我找到真正解决方案的链接,如果你想知道发生了什么,这里就是它们

我下载了第三个链接中所述的库,并且工作起来很吸引人。希望能帮助到你!

https://www.unix.com/unix-for-advanced-and-expert-users/107611-difference-between-libsqlclient-so-libsqlclient_r-so.html

http://www.tango-controls.org/community/forum/c/general/installation/ubuntu-1604-problem-installing-from-source-code-libmysqlclient-replaces-libmysqlclient_r/

https://superuser.com/questions/1101426/installing-libmysqlclient18-on-ubuntu-16-04?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa&newreg=9c558283c488461aaf597ef1132e4ca0

于 2018-05-31T21:05:25.090 回答
0

这里有几个关于这个问题的非常好的链接:

  1. 在基于 Unix 的系统上手动制作插件(来自 Qt 文档):http: //qt-project.org/doc/qt-5/sql-driver.html

  2. 一个写得很好的链接,专门针对这个问题(不要忘记从源代码安装 Qt,这可以通过在从 .run 可执行文件安装时在第一步中选中相应的(隐藏)框来完成,或者通过下载“ qt-everywhere-opensource-src' 版本): http ://adamcavendish.is-programmer.com/posts/40431.html

享受吧,佩曼

于 2014-04-07T22:22:29.170 回答
-2

我的答案:

QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
db.setDatabaseName("dbname");
db.setHostName("localhost");
db.setUserName("usernm");
db.setPassword("password");

if (db.open())
{
    qDebug() << "SUCCESS!";
    db.close();
}
于 2014-02-27T19:31:27.613 回答