我试图在我的应用程序中连接到 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/