c++ - 无法连接QMYSQL数据库

标签 c++ mysql qt

我试图在我的应用程序中连接到 QMYSQL 数据库,但每次使用此代码时都会抛出异常“无法打开数据库”。 Mysql 服务器正在运行,没有任何东西阻止连接。难道我做错了什么?

这是我派生的类(class)。 .h:

class DatabaseConnection
{
public:
    DatabaseConnection(){};
    virtual ~DatabaseConnection() {};

protected:
    void createConnection
        (const char* dbtype, const char* connection,
        const char* hostname, const char* dbName, const char* username,
        const char* password, int port);

    void closeDb();
    bool isOpen() const;
    QSqlDatabase& getDb(const char* connection);

private:
    QSqlDatabase db; 

};

.cpp

#include "DatabaseConnection.h"

void DatabaseConnection::createConnection(const char* dbtype, const char* connection,
const char* hostname, const char* username, const char* dbName, const char* password, int port)
{
    db = QSqlDatabase::addDatabase(dbtype, connection);

    db.setHostName(hostname);
    db.setDatabaseName(dbName);
    db.setUserName(username);
    db.setPassword(password);
    db.setPort(port);
}


void DatabaseConnection::closeDb()
{
    db.close();
}

bool DatabaseConnection::isOpen() const
{
    return db.isOpen();
}

QSqlDatabase& DatabaseConnection::getDb(const char* connection)
{
    return db;
}

这就是我使用它的方式。 .h:

class AuthorizeUser : private DatabaseConnection
{
public:
    explicit AuthorizeUser() 
    {
        createConnection("QMYSQL", "", "", "users", "root", "root", 3306);
    };
    ~AuthorizeUser() { closeDb(); };
    ....

.cpp

#include "Authorization.h"


void AuthorizeUser::checkCredentials(const QString& m_login, const QString& m_password)
{

    if (!isOpen())
        throw "Cannot open DB!";


    getUsersQuery.exec("SELECT * FROM users");

    ....

最佳答案

  • 您设置了一个空字符串作为主机。尝试“本地主机”。
  • 您将“root”设置为数据库名称,将“users”设置为用户,这听起来不对
  • 您必须按照 addDatabase() 中的说明 open() 数据库:

Before using the connection, it must be initialized. e.g., call some or all of setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), and setConnectOptions(), and, finally, open().

关于c++ - 无法连接QMYSQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975943/

相关文章:

mysql - 如何在 JSF 的 inputMask 中传递特定格式的 dateTime 参数?

qt - 如何在QTableWidget中对数据进行排序?

qt - 如何从 C++ 中删除属性上的 QML 绑定(bind)?

c++ - Actor 和 union 一样安全吗?

c++ - Boost::Program_options,传递未知的命令行参数

mysql - 上传图像文件并跟踪 mysql 表

c++ - Qt GUI 已停止工作

c++ - 没有兼容的方法来转换相同大小的有符号/无符号

c++ - auto_ptr 的大小是多少?

php - 为什么 PHP 函数只返回来自 mysql 的一行