2015-10-06 3 views
0

Я пытаюсь подключиться к базе данных QMYSQL в своем приложении, но каждый раз при использовании этого исключения кода генерируется «Невозможно открыть БД». Сервер Mysql запущен, ничто не блокирует соединение. Я делаю что-то неправильно?Не удается подключиться к базе данных QMYSQL

Это класс, из которого я получаю. .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"); 

    .... 
+0

Вы должны попытаться проанализировать 'lastError' из своей' QSqlDatabase' –

ответ

0
  • Вы установили пустую строку в качестве хоста. Попробуйте «localhost».
  • Вы устанавливаете «корень» в качестве имени базы данных и «пользователей», как пользователь, который звучит неправильно
  • Вы должны open() базу данных, как описано в addDatabase():

Перед использованием соединения, он должен инициализироваться. например, вызвать некоторые или все setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() и setConnectOptions() и, наконец, open().