c++类中mysql数据库调用的问题

iqjalb3h  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(471)

我目前正在开发一个桌面应用程序,用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的公共功能
有人能提出解决方案或说我做错了什么吗?如果这是愚蠢的抨击我,这是应得的啊哈,但我相当厌倦了看视频和没完没了的帖子,没有找到一个解决办法。
抱歉发了这么长的帖子,提前谢谢!

nlejzf6q

nlejzf6q1#

您正在使用 "QSQLITE" 作为调用时的驱动程序名称 QSqlDatabase::addDatabase 当您尝试使用mysql时,您应该使用 "QMYSQL" 相反。
看到了吗http://doc.qt.io/qt-5/qsqldatabase.html#adddatabase 获取驱动程序名称列表。

相关问题