我目前正在使用Qt在C ++中处理我的项目。我有MySQL作为数据库存储,我的想法是建立一个像MSN和Skype这样的小型信使。
然而,我的MySQL查询失败了。它根本没有结果或给我一个错误。即将出现大量代码,对不起。
这是我的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()
{
}
mysql_result mysql::create_result(QString query)
{
return mysql_result(this->db.exec(query));
}
QSqlError mysql::error()
{
return this->db.lastError();
}
连接已打开。这是正常的。
这是我的mysql_result.cpp,我用来添加参数,插入,获取结果等文件:
#include "mysql_result.h"
mysql_result::mysql_result(QSqlQuery query)
{
this->query = query;
}
void mysql_result::add_parameter(QVariant value)
{
this->query.addBindValue(value);
}
void mysql_result::add_parameter(QString key, QVariant value)
{
this->query.bindValue(key, value);
}
int mysql_result::get_last_id()
{
return this->query.lastInsertId().toInt();
}
void mysql_result::execute()
{
this->query.execBatch();
}
QSqlQuery mysql_result::get_query()
{
return this->query;
}
mysql_result::~mysql_result()
{
}
好的,这应该有效。如果我有以下代码,它会正确返回数据库中的所有成员first_name:
mysql_result res = _mysql->create_result("SELECT * FROM members");
QSqlQuery qry = res.get_query();
while (qry.next())
{
qDebug() << qry.value("first_name");
}
在member_controller.cpp(我用来按名称/ id检索成员的类)中,我得到了这个:
member* member_controller::get_member(int id)
{
mysql_result result = engine::get_mysql().create_result("SELECT * FROM members WHERE member_id = :ID");
result.add_parameter(":ID", id);
QSqlQuery query = result.get_query();
if (query.exec() && query.next())
{
return new member(id, query.value("first_name").toString(), query.value("second_name").toString(), query.value("screen_name").toString(), query.value("email").toString(), query.value("status").toString());
}
else
{
qDebug() << engine::get_mysql().error() << "\n";
qDebug() << query.lastError() << "\n";
}
return new member(0, "", "", "", "", "");
}
它做什么会转到else,我得到错误无效语法附近:ID。如果我用@ID替换:ID(就像在C#中一样),它将转到其他没有错误代码的地方..我不知道问题是什么。
两件事。代码需要进行一些优化并变得更容易,我将继续努力。是否可以/允许将代码放入pastebin并粘贴URL而不是将代码放在这里?
答案 0 :(得分:1)
尝试将您的查询更改为:
"SELECT * FROM members WHERE member_id = ?"
并添加你的参数:
result.add_parameter(0, id);
我还怀疑,if (query.exec() && query.next())
不正确,我应该删除对.next()
的检查,因为我认为这需要在结果集中存在另一条记录。