【发布时间】:2019-09-16 11:58:21
【问题描述】:
我有 MySQL Server 8.0 (Workbunch),我正在尝试使用 Qt/C++ (QSqlDatabase) 打开一个数据库。但是db.open(),总是返回false。为什么?我用user: rootpass: mypass
Log from terminal:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL
QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
db state: false
paneldb.cpp
#include "paneldb.h"
#include "ui_paneldb.h"
PanelDB::PanelDB(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::PanelDB)
{
ui->setupUi(this);
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("root");
db.setPassword("mypass");
bool ok = db.open();
qDebug() << "db state: " << ok;
}
PanelDB::~PanelDB()
{
delete ui;
}
paneldb.h
#ifndef PANELDB_H
#define PANELDB_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QDebug>
namespace Ui {
class PanelDB;
}
class PanelDB : public QMainWindow
{
Q_OBJECT
public:
explicit PanelDB(QWidget *parent = nullptr);
~PanelDB();
private:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
Ui::PanelDB *ui;
};
#endif // PANELDB_H
专业文件:
QT += core gui
QT += sql
MYSQL 日志:
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
如何使用 QT 连接我的数据库?
【问题讨论】:
-
QMYSQL 驱动程序未加载是可能的问题。通过查看 QSqlDatabase::lastError().text() 进行确认
-
您应该从大多数驱动程序的源代码构建 Qt SQL 驱动程序... MySQL .. QODBC ..etc。不要依赖随附的安装驱动程序。
标签: c++ mysql database qt database-connection