Класс QSqlResult
Класс QSqlResult предоставляет абстрактный интерфейс для доступа к данным из конкретных SQL баз данных. Подробнее...
| Заголовок: | #include <QSqlResult> |
| CMake: | find_package(Qt6 COMPONENTS Sql REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
| qmake: | QT += sql |
Открытые функции
| virtual | ~QSqlResult() |
| virtual QVariant | handle() const |
Защищенные типы
| enum | BindingSyntax { PositionalBinding, NamedBinding } |
Защищенные функции
| QSqlResult(const QSqlDriver *db) | |
| void | addBindValue(const QVariant &val, QSql::ParamType paramType) |
| int | at() const |
| virtual void | bindValue(int index, const QVariant &val, QSql::ParamType paramType) |
| virtual void | bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType) |
| QSql::ParamType | bindValueType(int index) const |
| QSql::ParamType | bindValueType(const QString &placeholder) const |
| QSqlResult::BindingSyntax | bindingSyntax() const |
| QVariant | boundValue(int index) const |
| QVariant | boundValue(const QString &placeholder) const |
| int | boundValueCount() const |
| QString | boundValueName(int index) const |
| QList<QVariant> & | boundValues() const |
| void | clear() |
| virtual QVariant | data(int index) = 0 |
| const QSqlDriver * | driver() const |
| virtual bool | exec() |
| QString | executedQuery() const |
| virtual bool | fetch(int index) = 0 |
| virtual bool | fetchFirst() = 0 |
| virtual bool | fetchLast() = 0 |
| virtual bool | fetchNext() |
| virtual bool | fetchPrevious() |
| bool | hasOutValues() const |
| bool | isActive() const |
| bool | isForwardOnly() const |
| virtual bool | isNull(int index) = 0 |
| bool | isSelect() const |
| bool | isValid() const |
| QSqlError | lastError() const |
| virtual QVariant | lastInsertId() const |
| QString | lastQuery() const |
| virtual int | numRowsAffected() = 0 |
| virtual bool | prepare(const QString &query) |
| virtual QSqlRecord | record() const |
| virtual bool | reset(const QString &query) = 0 |
| void | resetBindCount() |
| virtual bool | savePrepare(const QString &query) |
| virtual void | setActive(bool active) |
| virtual void | setAt(int index) |
| virtual void | setForwardOnly(bool forward) |
| virtual void | setLastError(const QSqlError &error) |
| virtual void | setQuery(const QString &query) |
| virtual void | setSelect(bool select) |
| virtual int | size() = 0 |
Подробное описание
Обычно вы будете использовать QSqlQuery вместо QSqlResult, так как QSqlQuery предоставляет универсальную обертку для специфичных для базы данных реализаций QSqlResult.
Если вы реализуете свой собственный SQL-драйвер (путем наследования от QSqlDriver), вам потребуется предоставить свой собственный подкласс QSqlResult, который реализует все чисто виртуальные функции и другие виртуальные функции, которые вам необходимы.
См. также QSqlDriver.
Документация по типам членов
enum QSqlResult::BindingSyntax
Этот перечислимый тип задаёт различные синтаксисы для указания заполнителей в подготовленных запросах.
| Константа | Значение | Описание |
|---|---|---|
QSqlResult::PositionalBinding |
0 |
Использовать позиционный синтаксис в стиле ODBC, с "?" в качестве заполнителей. |
QSqlResult::NamedBinding |
1 |
Использовать синтаксис в стиле Oracle с именованными заполнителями (например, ":id") |
См. также bindingSyntax().
Документация по функциям-членам
[protected] QSqlResult::QSqlResult(const QSqlDriver *db)
Создаёт QSqlResult с использованием драйвера базы данных db. Объект инициализируется в неактивном состоянии.
См. также isActive() и driver().
[virtual] QSqlResult::~QSqlResult()
Уничтожает объект и освобождает все выделенные ресурсы.
[protected] void QSqlResult::addBindValue(const QVariant &val, QSql::ParamType paramType)
Связывает значение val типа параметра paramType с ближайшей доступной позицией в текущей записи (строке).
См. также bindValue().
[protected] int QSqlResult::at() const
Возвращает текущую (нумерация с нуля) позицию строки результата. Может возвращать специальные значения QSql::BeforeFirstRow или QSql::AfterLastRow.
См. также setAt() и isValid().
[virtual protected] void QSqlResult::bindValue(int index, const QVariant &val, QSql::ParamType paramType)
Связывает значение val типа параметра paramType с позицией index в текущей записи (строке).
См. также addBindValue().
[virtual protected] void QSqlResult::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
Это перегруженный метод.
Связывает значение val типа параметра paramType с именем placeholder в текущей записи (строке).
Примечание: Связывание неопределённого placeholder приведёт к неопределённому поведению.
См. также QSqlQuery::bindValue().
[protected] QSql::ParamType QSqlResult::bindValueType(int index) const
Возвращает тип параметра для значения, связанного по позиции index.
См. также boundValue().
[protected] QSql::ParamType QSqlResult::bindValueType(const QString &placeholder) const
Это перегруженный метод.
Возвращает тип параметра для значения, связанного с заданным именем placeholder.
[protected] QSqlResult::BindingSyntax QSqlResult::bindingSyntax() const
Возвращает синтаксис связывания, используемый подготовленными запросами.
[protected] QVariant QSqlResult::boundValue(int index) const
Возвращает значение, связанное по позиции index в текущей записи (строке).
См. также bindValue() и boundValues().
[protected] QVariant QSqlResult::boundValue(const QString &placeholder) const
Это перегруженный метод.
Возвращает значение, связанное с заданным именем placeholder в текущей записи (строке).
См. также bindValueType().
[protected] int QSqlResult::boundValueCount() const
Возвращает количество связанных значений в результате.
См. также boundValues().
[protected] QString QSqlResult::boundValueName(int index) const
Возвращает имя связанного значения по позиции index в текущей записи (строке).
См. также boundValue().
[protected] QList<QVariant> &QSqlResult::boundValues() const
Возвращает вектор связанных значений результата для текущей записи (строки).
См. также boundValueCount().
[protected] void QSqlResult::clear()
Очищает весь набор результатов и освобождает связанные ресурсы.
[pure virtual protected] QVariant QSqlResult::data(int index)
Возвращает данные для поля index в текущей строке в виде QVariant. Этот метод вызывается только если результат находится в активном состоянии, расположен на корректной записи, и index неотрицателен. Классы-наследники должны переопределить этот метод и вернуть значение поля index или QVariant() если оно не может быть определено.
[protected] const QSqlDriver *QSqlResult::driver() const
Возвращает драйвер, связанный с результатом. Это объект, переданный в конструктор.
[virtual protected] bool QSqlResult::exec()
Выполняет запрос, возвращая true в случае успеха; в противном случае возвращает false.
См. также prepare().
[protected] QString QSqlResult::executedQuery() const
Возвращает запрос, который был фактически выполнен. Он может отличаться от запроса, переданного, например, если были использованы связанные значения с подготовленным запросом, а базовая база данных не поддерживает подготовленные запросы.
См. также exec() и setQuery().
[pure virtual protected] bool QSqlResult::fetch(int index)
Перемещает результат на произвольную (нумерация с нуля) строку index.
Этот метод вызывается только если результат находится в активном состоянии. Классы-наследники должны переопределить этот метод, переместить результат в строку index и вызвать setAt() с соответствующим значением. Вернуть true для обозначения успеха или false для обозначения неудачи.
См. также isActive(), fetchFirst(), fetchLast(), fetchNext() и fetchPrevious().
[pure virtual protected] bool QSqlResult::fetchFirst()
Перемещает результат на первую запись (строка 0) в результате.
Этот метод вызывается только если результат находится в активном состоянии. Классы-наследники должны переопределить этот метод, переместить результат на первую запись и вызвать setAt() с соответствующим значением. Вернуть true для обозначения успеха или false для обозначения неудачи.
См. также fetch() и fetchLast().
[pure virtual protected] bool QSqlResult::fetchLast()
Перемещает результат на последнюю запись (последняя строка) в результате.
Этот метод вызывается только если результат находится в активном состоянии. Классы-наследники должны переопределить этот метод, переместить результат на последнюю запись и вызвать setAt() с соответствующим значением. Вернуть true для обозначения успеха или false для обозначения неудачи.
См. также fetch() и fetchFirst().
[virtual protected] bool QSqlResult::fetchNext()
Перемещает результат на следующую доступную запись (строку) в результате.
Этот метод вызывается только если результат находится в активном состоянии. Стандартная реализация вызывает fetch() со следующим индексом. Классы-наследники могут переопределить этот метод и переместить результат на следующую запись другим способом, вызвав setAt() с соответствующим значением. Вернуть true для обозначения успеха или false для обозначения неудачи.
См. также fetch() и fetchPrevious().
[virtual protected] bool QSqlResult::fetchPrevious()
Перемещает результат на предыдущую запись (строку) в результате.
Этот метод вызывается только если результат находится в активном состоянии. Стандартная реализация вызывает fetch() с предыдущим индексом. Классы-наследники могут переопределить этот метод и переместить результат на предыдущую запись другим способом, вызвав setAt() с соответствующим значением. Вернуть true для обозначения успеха или false для обозначения неудачи.
[virtual] QVariant QSqlResult::handle() const
Возвращает низкоуровневую дескриптор базы данных для этого набора результатов, обернутый в QVariant, или недействительный QVariant, если дескриптор отсутствует.
Предупреждение: Используйте с большой осторожностью и только если вы знаете, что делаете.
Предупреждение: Возвращённый дескриптор может стать устаревшим, если результат изменён (например, если вы его очистили).
Предупреждение: Дескриптор может быть NULL, если результат ещё не был выполнен.
END_OF_DOCUMENT_MARKERПредупреждение: PostgreSQL: в режиме forward-only, обработчик QSqlResult может измениться после вызова fetch(), fetchFirst(), fetchLast(), fetchNext(), fetchPrevious(), nextResult().
Возвращаемый здесь обработчик зависит от базы данных, вам следует запросить имя типа варианта перед доступом к нему.
Этот пример извлекает обработчик для результата sqlite:
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QVariant v = query.result()->handle();
if (v.isValid() && qstrcmp(v.typeName(), "sqlite3_stmt*") == 0) {
// v.data() returns a pointer to the handle
sqlite3_stmt *handle = *static_cast<sqlite3_stmt **>(v.data());
if (handle) {
// ...
}
} Этот фрагмент возвращает обработчик для PostgreSQL или MySQL:
if (qstrcmp(v.typeName(), "PGresult*") == 0) {
PGresult *handle = *static_cast<PGresult **>(v.data());
if (handle) {
// ...
}
}
if (qstrcmp(v.typeName(), "MYSQL_STMT*") == 0) {
MYSQL_STMT *handle = *static_cast<MYSQL_STMT **>(v.data());
if (handle) {
// ...
}
} См. также QSqlDriver::handle().
[protected] bool QSqlResult::hasOutValues() const
Возвращает true если хотя бы одно из связанных значений запроса является QSql::Out или QSql::InOut; в противном случае возвращает false.
См. также bindValueType().
[protected] bool QSqlResult::isActive() const
Возвращает true если результат имеет записи для извлечения; в противном случае возвращает false.
[protected] bool QSqlResult::isForwardOnly() const
Возвращает true если вы можете прокручивать только вперёд по набору результатов; в противном случае возвращает false.
См. также setForwardOnly().
[pure virtual protected] bool QSqlResult::isNull(int index)
Возвращает true если поле в позиции index в текущей строке имеет значение NULL; в противном случае возвращает false.
[protected] bool QSqlResult::isSelect() const
Возвращает true если текущий результат получен из SELECT оператора; в противном случае возвращает false.
См. также setSelect().
[protected] bool QSqlResult::isValid() const
Возвращает true если результат расположен на корректной записи (т.е. результат не расположен до первой или после последней записи); в противном случае возвращает false.
См. также at().
[protected] QSqlError QSqlResult::lastError() const
Возвращает последнюю ошибку, связанную с результатом.
См. также setLastError().
[virtual protected] QVariant QSqlResult::lastInsertId() const
Возвращает идентификатор объекта последней вставленной строки, если база данных его поддерживает. Недействительный QVariant будет возвращён, если запрос не вставил ни одного значения или база данных не сообщила об идентификаторе обратно. Если операцией вставки затронуто более одной строки, поведение не определено.
Обратите внимание, что для баз данных Oracle будет возвращён ROWID строки, а для баз данных MySQL — поле автоинкремента строки.
См. также QSqlDriver::hasFeature().
[protected] QString QSqlResult::lastQuery() const
Возвращает текст текущего SQL запроса или пустую строку, если его нет.
См. также setQuery().
[pure virtual protected] int QSqlResult::numRowsAffected()
Возвращает количество затронутых строк последним выполненным запросом или -1, если это невозможно определить или если запрос является SELECT оператором.
См. также size().
[virtual protected] bool QSqlResult::prepare(const QString &query)
Подготавливает указанный запрос к выполнению; запрос обычно будет использовать плейсхолдеры, чтобы его можно было выполнять многократно. Возвращает true, если запрос успешно подготовлен; в противном случае возвращает false.
См. также exec().
[virtual protected] QSqlRecord QSqlResult::record() const
Возвращает текущую запись, если запрос активен; в противном случае возвращает пустую QSqlRecord.
Реализация по умолчанию всегда возвращает пустую QSqlRecord.
См. также isActive().
[pure virtual protected] bool QSqlResult::reset(const QString &query)
Устанавливает результат для использования SQL оператора query для последующего извлечения данных.
Производные классы должны переопределять эту функцию и применять запрос к базе данных. Эта функция вызывается только после того, как результат установлен в неактивное состояние и расположен перед первой записью нового результата. Производные классы должны возвращать true, если запрос был успешен и готов к использованию, или false в противном случае.
См. также setQuery().
[protected] void QSqlResult::resetBindCount()
Сбрасывает количество параметров связывания.
[virtual protected] bool QSqlResult::savePrepare(const QString &query)
Подготавливает заданный запрос, используя функциональность базовой базы данных, где это возможно. Возвращает true если запрос успешно подготовлен; в противном случае возвращает false.
Примечание: Этот метод должен был называться "safePrepare()".
См. также prepare().
[virtual protected] void QSqlResult::setActive(bool active)
Эта функция предоставляется производным классам для установки внутреннего активного состояния в active.
См. также isActive().
[virtual protected] void QSqlResult::setAt(int index)
Эта функция предоставляется производным классам для установки внутреннего (нулевого) положения строки в index.
См. также at().
[virtual protected] void QSqlResult::setForwardOnly(bool forward)
Устанавливает режим forward only в forward. Если forward true, разрешён только fetchNext() для навигации по результатам. Режим forward only потребляет значительно меньше памяти, так как результаты не нужно кэшировать. По умолчанию эта функция отключена.
Установка forward only в false является предложением для движка базы данных, который принимает окончательное решение о том, является ли набор результатов только forward only или прокручиваемым. isForwardOnly() всегда возвращает правильный статус набора результатов.
Примечание: Вызов setForwardOnly после выполнения запроса приведёт, в лучшем случае, к непредсказуемым результатам, а в худшем — к сбою.
Примечание: Чтобы убедиться, что запрос forward-only завершился успешно, приложение должно проверить lastError() на ошибку не только после выполнения запроса, но и после навигации по результатам запроса.
Предупреждение: PostgreSQL: При навигации по результатам запроса в режиме forward-only не выполняйте другие SQL команды в той же базе данных. Это приведёт к потере результатов запроса.
См. также isForwardOnly(), fetchNext(), и QSqlQuery::setForwardOnly().
[virtual protected] void QSqlResult::setLastError(const QSqlError &error)
Эта функция предоставляется производным классам для установки последней ошибки на error.
См. также lastError().
[virtual protected] void QSqlResult::setQuery(const QString &query)
Устанавливает текущий запрос для результата на query. Необходимо вызвать reset() для выполнения запроса в базе данных.
См. также reset() и lastQuery().
[virtual protected] void QSqlResult::setSelect(bool select)
Эта функция предоставляется производным классам для указания того, является ли текущий оператор SQL SELECT оператором. Параметр select должен быть true, если оператор является SELECT оператором; в противном случае он должен быть false.
См. также isSelect().
[pure virtual protected] int QSqlResult::size()
Возвращает размер SELECT результата или -1, если это невозможно определить или если запрос не является SELECT оператором.
См. также numRowsAffected().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qsqlresult.html