QT连接MySQL数据库的问题
目的
目前有一个需求,是通过QT连接MySQL数据库进行数据的相关操作,首先根据网上的例子,编写了以下连接数据库的示例代码:
1. 新建了一个QT工程
2. 主体代码为:
- 在项目.pro文件中加入“QT+=sql”
- 在mainwindow.h头文件中引入必要的头
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QWidget> #include <QSqlDatabase> #include <QDebug> #include <QMenuBar> #include <QMenu> #include <QAction> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void connectMYSQL(); void createDB(); void initDB(); QSqlDatabase database; private: Ui::MainWindow *ui; public slots: void connectDatabase();//连接数据库 }; #endif // MAINWINDOW_H
- mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenuBar *menuBar = this->menuBar();
QMenu *menuFile = menuBar->addMenu("服务器");
QAction *openAction = menuFile->addAction("连接数据库");
connect(openAction, &QAction::triggered, this, &MainWindow::connectDatabase);
}
MainWindow::~MainWindow()
{
delete ui;
}
//连接数据库
void MainWindow::connectDatabase(){
if (QSqlDatabase::contains("MySQL"))//判断testConnect连接是否存在并连接
{
database = QSqlDatabase::database("MySQL");
}
else //未连接则新建数据库连接
{
database=QSqlDatabase::addDatabase("QMYSQL");//创建数据库连接,并为其命名testConnect
database.setHostName("127.0.0.1"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
database.setPort(3306); //连接数据库端口号,与设置一致
database.setUserName("root"); //数据库用户名,与设置一致
database.setPassword("_____"); //数据库密码,与设置一致
}
if(!database.open())
{
qDebug()<<"fail to connect mysql:";
return;
}
else{
qDebug()<<"success!";
}
}
3. 运行后报错
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE
系统中只有SQLite的数据库驱动,这时就需要对MYSQL的驱动进行编译
4. QT下MySQL驱动编译
- 首先,判断当前QT的版本:
查看其中的Qt版本为5.12.8qtcreator -version
- 下载该版本的Qt源码:
自行在官网查找对应版本的qt-everywhere-src代码包 - 解压之后,进行编译:
进入目录qt-everywhere-src/qtbase/src/plugins/sqldrivers/mysql
,之后打开该目录下的mysql.pro项目,进行编译。可能需要修改部分内容,
- 其中QMAKE_USE+=mysql注释掉
- 然后在LIBS+=-L{libpath} -lmysqlclient
- INCLUDEPATH+=/usr/include/mysql
include(…/qsqldriverbase.pri)
- 编译生成的mysqldriver.so放在
qtpaths --plugin-dir
下的sqldrivers目录下。
5. 再次运行访问数据库代码
再次运行上述代码,已经可以成功连接数据库了。