我目前正在开发一个桌面应用程序,用qt/c++访问一个远程mysql数据库。我的方法是创建多个.h/.cpp文件(对应于不同的ui小部件)并调用一个通用的.h/.cpp数据库管理器文件来处理登录、查询等。不幸的是,我有点卡住了,因为要么我得到了“qsqldatabaseprivate::removedatabase:connection‘databasename’仍在使用,所有的查询都将停止工作。”或者另一种奇怪的错误,如“query.exec:数据库未打开”。
我已经找了一天了,找不到任何有助于我的案子的东西,所以我决定在这里碰碰运气:)
我将留给您数据库管理器和登录.h/.cpp文件:
分贝小时
# ifndef DB_H
# define DB_H
# include <QtSql>
# include <QSqlDatabase>
# include <QtDebug>
# include <QMessageBox>
class db
{
private:
friend class login;
QSqlDatabase dataBase;
public:
db();
~db();
bool login(QString, QString);
};
# endif // DB_H
数据库cpp
# include "db.h"
db::db()
{
dataBase = QSqlDatabase::addDatabase("QSQLITE", "*connection name*");
dataBase.setHostName("*host*");
dataBase.setPassword("*host-password*");
dataBase.setDatabaseName("*connection name");
if(!dataBase.open())
{
//error message
}
else
{
qDebug() << "Open...";
}
}
db::~db()
{
if (dataBase.isOpen())
{
dataBase.close();
}
QSqlDatabase::removeDatabase("*connection name*");
}
登录.h
# ifndef LOGIN_H
# define LOGIN_H
# include "db.h"
# include <QDialog>
# include <QDebug>
# include <QMessageBox>
# include <QtSql>
# include <QSqlDatabase>
namespace Ui {
class login;
}
class login : public QDialog
{
Q_OBJECT
public:
explicit login(QWidget *parent = nullptr);
~login();
private slots:
void on_login_button_clicked();
private:
Ui::login *ui;
};
# endif // LOGIN_H
login.cpp->当前发生问题的位置
# include "login.h"
# include "ui_login.h"
login::login(QWidget *parent) :
QDialog(parent),
ui(new Ui::login)
{
ui->setupUi(this);
//Basic Configurations:
}
login::~login()
{
delete ui;
}
void login::on_login_button_clicked()
{
QString userID = ui->user_insert->text();
QString userPassword = ui->pass_insert->text();
qDebug() << userID << userPassword;
//if conditions to check no one tampers with the limits in lineEdits
else
{
QSqlDatabase loginCall = QSqlDatabase::database("*connection Name*");
if (loginCall.isOpen())
{
qDebug() << "Also Open...";
//call a db.hdb.cpp file to execute the login of the user
}
}
}
我认为在main.cpp中创建一个数据库示例很重要。
就像我说的,我已经搜索了很长一段时间了,我尝试的当前方法是调用当前的连接
QSqlDatabase loginCall = QSqlDatabase::database("*connection Name*");
但是从现在起我无法访问db.h/db.cpp的公共功能
有人能提出解决方案或说我做错了什么吗?如果这是愚蠢的抨击我,这是应得的啊哈,但我相当厌倦了看视频和没完没了的帖子,没有找到一个解决办法。
抱歉发了这么长的帖子,提前谢谢!
1条答案
按热度按时间nlejzf6q1#
您正在使用
"QSQLITE"
作为调用时的驱动程序名称QSqlDatabase::addDatabase
当您尝试使用mysql时,您应该使用"QMYSQL"
相反。看到了吗http://doc.qt.io/qt-5/qsqldatabase.html#adddatabase 获取驱动程序名称列表。