以下代碼在QSqlQuery::exec()
上失敗。當我運行沒有準備好的聲明參數查詢,它返回正確的結果,可作爲一個期望通過QSqlQuery::next()
QSqlQuery準備SELECT語句在exec()上失敗
executedQuery()
報道說":username"
實際上不是由參數所取代,但有?
(是否應該,因爲查詢沒有成功執行?)。
db_
是一個QSqlDatabase類變量和isOpen()
報告true
。 Qt框架版本是4.7.3。
DBSql::userInfo(const QString &username,
QString &passwd,
QString &name,
UserPriv priv)
{
QSqlQuery userQuery(db_);
const QString userStr("SELECT u.id, u.fullname, u.password, p.description \
FROM users u INNER JOIN privilege p ON u.privilege_id = p.id \
WHERE u.username = :username");
userQuery.bindValue(":username", username);
if (!userQuery.prepare(userStr))
std::cout << "prepare failed" << std::endl;
if (userQuery.exec()) {
while (userQuery.next()) {
userId = userQuery.value(0).toInt();
name = userQuery.value(1).toString();
passwd = userQuery.value(2).toString();
const QString privilegeDesc = userQuery.value(3).toString();
}
}
}
嘗試結合價值 – Furkan
你泄露你的QSqlQuery資源之前調用準備方法。你應該使用一個簡單的自動變量:'QSqlQuery userQuery(db _);'編輯 – octal
,謝謝。它最初不是用堆分配編寫的,但我試圖將它看作是一種絕望的最後手段,以查看行爲是否改變。 –