自Qt5.7以后,Qt官方已经不再提供MySQL驱动,而是转向了MariaDB。但是,对于一些项目,可能还是需要使用MySQL,这时候就需要自己编译MySQL驱动了
当使用Cmake出现如下报错:QSqldatabase: No Such file and directory。这种情况其实是跟CmakeList里面里面添加SQL模块有关,需要在CmakeList里面添加SQL模块。
在Cmake中添加SQL模块
首先打开CmakeList.txt文件,添加如下代码:
1 find_package(Qt NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
2 find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
接下来在CmakeList.txt文件中添加如下代码:
注意${PROJECT_NAME}是您的项目名称,请将其替换为您的项目名称。
1 target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
2 target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Sql)
编译MySQL驱动
在完成上述步骤后,如果你没有MYSQL驱动的话,你在编译的时候会在应用程序输出那里看到:
1 QSqlDatabase: QMYSQL driver not loaded
2 QSqlDatabase: available drivers: xxxx
配置MySQL驱动
推荐使用 GitHub 上的预编译版本:
将编译好的qsqlmysql插件复制到Qt的插件目录下。
/path/to/Qt/plugins/sqldrivers/
在Qt项目中,使用QSqlDatabase类连接MySQL数据库。
1 #include <QtSql/QSqlDatabase>
2 #include <QtSql/QSqlError>
3
4 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
5 db.setHostName("localhost");
6 db.setDatabaseName("your_database");
7 db.setUserName("root");
8 db.setPassword("your_password");
9
10 if (!db.open()) {
11 qDebug() << "Error: " << db.lastError().text();
12 return;
13 }
使用QSqlQueryModel和QSqlTableModel
QSqlQueryModel用于只读模式,QSqlTableModel用于可编辑模式。
1 #include <QtSql/QSqlQueryModel>
2 #include <QtSql/QSqlTableModel>
3 #include <QTableView>
4
5 QSqlQueryModel *model = new QSqlQueryModel;
6 model->setQuery("SELECT * FROM your_table");
7 QTableView *view = new QTableView;
8 view->setModel(model);
9 view->show();