简体   繁体   English

无法连接到QMYSQL数据库

[英]Cannot connect to QMYSQL Database

I'm trying to connect to QMYSQL database in my app, but every time when use this code exception "Cannot open DB" is thrown. 我试图连接到我的应用程序中的QMYSQL数据库,但是每次使用此代码时,都会引发异常“无法打开DB”。 Mysql server is running, nothing is blocking connection. Mysql服务器正在运行,没有任何东西阻止连接。 Am I doing something wrong? 难道我做错了什么?

This is class that i'm deriving from. 这是我派生的课程。 .h: 。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 .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;
}

And that's how I'm using it. 这就是我的使用方式。 .h: 。H:

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

.cpp .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");

    ....
  • You set an empty string as host. 您将一个空字符串设置为主机。 Try "localhost". 尝试“本地主机”。
  • You are setting "root" as database name and "users" as user, which sounds wrong 您正在将“ root”设置为数据库名称,将“ users”设置为user,这听起来是错误的
  • You must open() the database as described in addDatabase() : 您必须按照addDatabase()描述open()数据库:

Before using the connection, it must be initialized. 在使用连接之前,必须将其初始化。 eg, call some or all of setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), and setConnectOptions(), and, finally, open(). 例如,调用部分或全部setDatabaseName(),setUserName(),setPassword(),setHostName(),setPort()和setConnectOptions(),最后调用open()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM