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