简体   繁体   中英

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. Mysql server is running, nothing is blocking connection. Am I doing something wrong?

This is class that i'm deriving from. .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;
}

And that's how I'm using it. .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");

    ....
  • You set an empty string as host. Try "localhost".
  • You are setting "root" as database name and "users" as user, which sounds wrong
  • You must open() the database as described in addDatabase() :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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