【发布时间】:2015-10-13 14:57:58
【问题描述】:
我终于在 C++ Qt 中修复了我的 MySQL 连接。但是,当我尝试绑定值时,出现以下错误:
QSqlError("2036", "QMYSQL3: Unable to bind value", "Using unsupported buffer type: 1701052421 (parameter: 1)")
我有这些文件:
Engine.h:
#ifndef ENGINE_H
#define ENGINE_H
#include "database/mysql.h"
class engine
{
private:
static mysql* _mysql;
public:
static void initialize();
static void destroy();
static mysql get_mysql();
};
#endif // ENGINE_H
Engine.cpp:
#include "engine.h"
#include "entities/member_controller.h"
#include <QDebug>
mysql* engine::_mysql;
void engine::initialize()
{
_mysql = new mysql();
member* mem = member_controller::get_member(1);
qDebug() << "mem name = " << mem->getFirstName() << " " << mem->getSecondName();
delete mem;
}
void engine::destroy()
{
delete _mysql;
}
mysql engine::get_mysql()
{
return *_mysql;
}
mysql.h:
#ifndef MYSQL_H
#define MYSQL_H
#include <QtSql>
#include <QString>
#include "mysql_result.h"
class mysql
{
private:
QSqlDatabase db;
public:
mysql();
~mysql();
mysql_result create_result(QString query);
QSqlError error();
QSqlQuery query_prepare(QString query1)
{
QSqlQuery query(this->db);
query.prepare(query1);
// this->query = query;
return query;
}
};
#endif // MYSQL_H
(query_prepare body temp. in header file just to test)
mysql.cpp
#include "mysql.h"
mysql::mysql()
{
this->db = QSqlDatabase::addDatabase("QMYSQL", "QMYSQL");
this->db.setHostName("localhost");
this->db.setUserName("root");
this->db.setPassword("Eequi4");
this->db.setDatabaseName("test");
this->db.open();
}
mysql::~mysql()
{
}
QSqlError mysql::error()
{
return this->db.lastError();
}
member_controller.h:
#ifndef MEMBER_CONTROLLER_H
#define MEMBER_CONTROLLER_H
#include <QString>
#include "member.h"
class member_controller
{
public:
static member* get_member(unsigned int id);
static member* get_member(QString email);
};
#endif // MEMBER_CONTROLLER_H
member_controller.cpp:
#include "member_controller.h"
#include "database/mysql_result.h"
#include "engine.h"
#include "database/mysql_result.h"
#include <QtSql/QSqlQuery>
member* member_controller::get_member(unsigned int id)
{
QSqlQuery result = engine::get_mysql().query_prepare("SELECT * FROM members WHERE member_id = :mem_id");
result.bindValue(":mem_id", id);
if (result.exec() && result.first())
{
return new member(id, result.value("first_name").toString(), result.value("second_name").toString(), result.value("screen_name").toString(), result.value("email").toString(), result.value("status").toString());
}
else
{
qDebug() << engine::get_mysql().error() << "\n";
qDebug() << result.lastError() << "\n";
}
return new member(0, "", "", "", "", "");
}
我希望这是所有需要的代码。我尝试使用除 :mem_id 之外的问号,但也没有运气。
【问题讨论】:
-
你知道我如何在 Windows 上做到这一点吗?如果这是一个菜鸟问题,我很抱歉。如果我构建一个 Qt 5.4 驱动程序并在 5.5 中使用它有关系吗?
-
我试过了,但是 make 不是一个被认可的程序或 w/e,所以我用 make.exe 下载了 GnuWin32,并在 qmake 之后使用它,但没有生成新的 .dll。也许我只是误解了它。使用make,报错:make (e=2): The system cannot find the file specified.