Не могу получить столбец из SQLite базы данных

Пишу свой мессенджер и понадобилось сделать поиск по пользователям. Вот код с базы данных на сервере:

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 это все биндил (тогда он в принципе не находит пользователей).

Для отладки сделал запрос который в коде выше

Данные в базе:

Код таблиц:

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
);

Сервер многопоточный, если это как-то влияет конечно (запросы на регистрацию и логин работают, так-что вряд-ли это важно).


Ответы (1 шт):

Автор решения: Sergey Tatarintsev

Вы неправильно подготавливаете стейтмент. Должно быть или так

query.prepare("SELECT idUser FROM Users WHERE idUser LIKE :begin");
query.bindValue(":begin", QString("%%1").arg(begin));

или так

query.prepare("SELECT idUser FROM Users WHERE idUser LIKE ?");
query.addBindValue(QString("%%1").arg(begin));

ну или на крайний случай

query.exec(QString("SELECT idUser FROM Users WHERE idUser LIKE %%1").arg(begin));

далее. boundValue() это не про получение результата. Должно быть как-то так

while (query.next()) {
        qDebug()<< query.value(0).toString();
    }
→ Ссылка