我正在编写我的 Messenger,需要用户进行搜索。这是服务器上数据库的代码:
QVector<QString> Database::searchUsers(Session *session, QString begin) {
QSqlQuery query(m_db);
query.prepare("SELECT idUser FROM Users WHERE idUser LIKE '%1%'");
//query.bindValue(":begin", begin);
if (!query.exec()) {
qCritical() << "Error while execute search users";
qCritical() << query.lastError().text();
return QVector<QString>();
}
QVector<QString> result;
while (query.next()) {
result.push_back(query.boundValue(0).toString());
}
qDebug() << "result size:" << result.size();
for (auto i : result) {
qDebug() << i;
}
return result;
}
我在控制台中得到的输出是已找到 1 个用户,但由于某种原因该列表为空(在 result.push_back... 行中)。
最初,我提出了以下请求:SELECT * FROM Users WHERE idUser LIKE '%:begin%' LIMIT 20,相应地,通过bindValue这都是bindil(然后它基本上找不到用户)
为了调试,我提出了上面代码中的请求
表代码:
CREATE TABLE IF NOT EXISTS Users(
idUser TEXT UNICAL PRIMARY KEY,
username TEXT,
hashPassword TEXT,
icoPath TEXT
);
CREATE TABLE IF NOT EXISTS Chats(
msgNamespaceId TEXT UNICAL PRIMARY KEY,
firstMember TEXT,
secondMember TEXT,
FOREIGN KEY(firstMember) REFERENCES Users(idUser) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY(secondMember) REFERENCES Users(idUser) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS Messages(
id TEXT UNICAL PRIMARY KEY,
value TEXT,
ownerId TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
msgNamespaceId TEXT,
FOREIGN KEY(ownerId) REFERENCES Users(idUser) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(msgNamespaceId) REFERENCES Chats(msgNamespaceId) ON DELETE CASCADE ON UPDATE CASCADE
);
服务器是多线程的,当然,如果这有任何影响的话(注册和登录工作的请求,所以这不太重要)
请帮帮我

您准备的声明不正确。一定是这样
或者
或作为最后的手段
更远。boundValue()不是为了获得结果。一定是这样的