Spec-Zone.ru › Qt 6.0

Класс QSqlDriver

Класс QSqlDriver — это абстрактный базовый класс для доступа к конкретным базам данных SQL. Подробнее...

Заголовок: #include <QSqlDriver>
CMake: find_package(Qt6 COMPONENTS Sql REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Наследует: QObject
  • Список всех членов, включая унаследованные

Общедоступные типы

Перечисление DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries, …, CancelQuery }
Перечисление IdentifierType { ИмяПоля, ИмяТаблицы }
Перечисление NotificationSource { НеизвестныйИсточник, СобственныйИсточник, ДругойИсточник }
Перечисление StatementType { ОператорWhere, ОператорSelect, ОператорUpdate, ОператорInsert, ОператорDelete }

Общедоступные функции

QSqlDriver(QObject *parent = nullptr)
виртуальный ~QSqlDriver()
виртуальный bool beginTransaction()
виртуальный void close() = 0
виртуальный bool commitTransaction()
виртуальный QSqlResult * createResult() const = 0
виртуальный QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const
виртуальный QString formatValue(const QSqlField &field, bool trimStrings = false) const
виртуальный QVariant handle() const
виртуальный bool hasFeature(QSqlDriver::DriverFeature feature) const = 0
виртуальный bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const
виртуальный bool isOpen() const
bool isOpenError() const
QSqlError lastError() const
виртуальный int maximumIdentifierLength(QSqlDriver::IdentifierType type) const
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
виртуальный bool open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0
виртуальный QSqlIndex primaryIndex(const QString &tableName) const
виртуальный QSqlRecord record(const QString &tableName) const
виртуальный bool rollbackTransaction()
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
виртуальный QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
виртуальный QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const
виртуальный bool subscribeToNotification(const QString &name)
виртуальный QStringList subscribedToNotifications() const
виртуальный QStringList tables(QSql::TableType tableType) const
виртуальный bool unsubscribeFromNotification(const QString &name)

Сигналы

void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

Защищенные функции

виртуальный void setLastError(const QSqlError &error)
виртуальный void setOpen(bool open)
виртуальный void setOpenError(bool error)

Подробное описание

Этот класс не следует использовать напрямую. Используйте QSqlDatabase вместо него.

Если вы хотите создать собственные драйверы SQL, вы можете унаследовать от этого класса и переопределить его чистые виртуальные функции и те виртуальные функции, которые вам нужны. Дополнительную информацию см. в разделе Как создать собственный драйвер базы данных.

См. также QSqlDatabase и QSqlResult.

Документация по типам членов

перечисление QSqlDriver::DriverFeature

Это перечисление содержит список функций, которые может поддерживать драйвер. Используйте hasFeature(), чтобы проверить, поддерживается ли функция или нет.

END_OF_DOCUMENT_MARKER
Константа Значение Описание
QSqlDriver::Transactions 0 Поддерживает ли драйвер транзакции SQL.
QSqlDriver::QuerySize 1 Может ли база данных сообщать о размере запроса. Обратите внимание, что некоторые базы данных не поддерживают возвращение размера (т.е. количества строк, возвращенных) запроса, в этом случае QSqlQuery::size() вернет -1.
QSqlDriver::BLOB 2 Поддерживает ли драйвер поля типа Binary Large Object.
QSqlDriver::Unicode 3 Поддерживает ли драйвер Unicode-строки, если это поддерживает сервер базы данных.
QSqlDriver::PreparedQueries 4 Поддерживает ли драйвер выполнение подготовленных запросов.
QSqlDriver::NamedPlaceholders 5 Поддерживает ли драйвер использование именованных заглушек.
QSqlDriver::PositionalPlaceholders 6 Поддерживает ли драйвер использование позиционных заглушек.
QSqlDriver::LastInsertId 7 Поддерживает ли драйвер возвращение Id последней измененной строки.
QSqlDriver::BatchOperations 8 Поддерживает ли драйвер пакетные операции, см. QSqlQuery::execBatch()
QSqlDriver::SimpleLocking 9 Запрещает ли драйвер запись блокировки таблицы, в то время как другие запросы имеют чтение блокировки на ней.
QSqlDriver::LowPrecisionNumbers 10 Разрешает ли драйвер получение числовых значений с низкой точностью.
QSqlDriver::EventNotifications 11 Поддерживает ли драйвер уведомления о событиях базы данных.
QSqlDriver::FinishQuery 12 Может ли драйвер выполнить очистку ресурсов низкого уровня при вызове QSqlQuery::finish().
QSqlDriver::MultipleResultSets 13 Может ли драйвер получить доступ к нескольким наборам результатов, возвращенным из пакетных инструкций или хранимых процедур.
QSqlDriver::CancelQuery 14 Разрешает ли драйвер отмену выполняющегося запроса.

Дополнительную информацию о поддерживаемых функциях можно найти в документации драйвера Qt SQL.

См. также hasFeature().

перечисление QSqlDriver::IdentifierType

Это перечисление содержит список типов идентификаторов SQL.

Константа Значение Описание
QSqlDriver::FieldName 0 Имя поля SQL
QSqlDriver::TableName 1 Имя таблицы SQL

перечисление QSqlDriver::NotificationSource

Это перечисление содержит список источников уведомлений SQL.

Константа Значение Описание
QSqlDriver::UnknownSource 0 Источник уведомления неизвестен
QSqlDriver::SelfSource 1 Источник уведомления — это подключение
QSqlDriver::OtherSource 2 Источник уведомления — другое подключение

перечисление QSqlDriver::StatementType

Это перечисление содержит список типов инструкций SQL (или клауз), которые может создавать драйвер.

Константа Значение Описание
QSqlDriver::WhereStatement 0 Инструкция SQL WHERE (например, WHERE f = 5).
QSqlDriver::SelectStatement 1 Инструкция SQL SELECT (например, SELECT f FROM t).
QSqlDriver::UpdateStatement 2 Инструкция SQL UPDATE (например, UPDATE TABLE t set f = 1).
QSqlDriver::InsertStatement 3 Инструкция SQL INSERT (например, INSERT INTO t (f) values (1)).
QSqlDriver::DeleteStatement 4 Инструкция SQL DELETE (например, DELETE FROM t).

См. также sqlStatement().

Документация по функциям-членам

QSqlDriver::QSqlDriver(QObject *parent = nullptr)

Создает новый драйвер с заданным parent.

[signal, since 5.0] void QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

Этот сигнал излучается, когда база данных публикует уведомление о событии, на которое драйвер подписан. name идентифицирует уведомление о событии, source указывает источник сигнала, payload содержит дополнительные данные, необязательно передаваемые с уведомлением.

Эта функция была представлена в Qt 5.0.

См. также subscribeToNotification().

[virtual] QSqlDriver::~QSqlDriver()

Уничтожает объект и освобождает все выделенные ресурсы.

[virtual] bool QSqlDriver::beginTransaction()

Эта функция вызывается для начала транзакции. В случае успеха возвращает true, в противном случае — false. Реализация по умолчанию ничего не делает и возвращает false.

См. также commitTransaction() и rollbackTransaction().

[pure virtual] void QSqlDriver::close()

Производные классы должны переопределить эту чистую виртуальную функцию для закрытия подключения к базе данных. Возвращает true при успехе, false при ошибке.

См. также open() и setOpen().

[virtual] bool QSqlDriver::commitTransaction()

Эта функция вызывается для подтверждения транзакции. В случае успеха возвращает true, в противном случае — false. Реализация по умолчанию ничего не делает и возвращает false.

См. также beginTransaction() и rollbackTransaction().

[pure virtual] QSqlResult *QSqlDriver::createResult() const

Создает пустой результат SQL в базе данных. Производные классы должны переопределить эту функцию и вернуть объект QSqlResult, соответствующий их базе данных, вызывающему коду.

[virtual] QString QSqlDriver::escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const

Возвращает identifier, экранированную в соответствии с правилами базы данных. identifier может быть именем таблицы или именем поля, в зависимости от type.

Реализация по умолчанию ничего не делает.

См. также isIdentifierEscaped().

[virtual] QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings = false) const

Возвращает строковое представление значения поля field для базы данных. Это используется, например, при построении инструкций INSERT и UPDATE.

Реализация по умолчанию возвращает значение, отформатированное как строка в соответствии со следующими правилами:

  • Если field — символьные данные, значение возвращается заключенным в одинарные кавычки, что подходит для многих баз данных SQL. Любые вложенные одинарные кавычки экранируются (заменяются двумя одинарными кавычками). Если trimStrings равно true (по умолчанию false), все хвостовые пробелы обрезаются из поля.
  • Если field — данные даты/времени, значение отформатировано в формате ISO и заключено в одинарные кавычки. Если данные даты/времени недействительны, возвращается "NULL".
  • Если field — данные qbytearray, и драйвер может редактировать двоичные поля, значение отформатировано как шестнадцатеричная строка.
  • Для любого другого типа поля вызывается toString() на его значении, и результат этого возвращается.

См. также QVariant::toString().

[virtual] QVariant QSqlDriver::handle() const

Возвращает дескриптор базы данных низкого уровня, обернутый в QVariant, или недействительный вариант, если дескриптор отсутствует.

Предупреждение: Используйте с большой осторожностью и только если вы знаете, что делаете.

Предупреждение: Дескриптор, возвращаемый здесь, может стать устаревшим указателем, если подключение изменено (например, если вы закрываете подключение).

Предупреждение: Дескриптор может быть NULL, если подключение еще не открыто.

Возвращаемый дескриптор зависит от базы данных, перед доступом к нему необходимо запросить имя типа варианта.

В этом примере извлекается дескриптор для подключения к sqlite:

QSqlDatabase db = QSqlDatabase::database();
QVariant v = db.driver()->handle();
if (v.isValid() && (qstrcmp(v.typeName(), "sqlite3*") == 0)) {
    // v.data() returns a pointer to the handle
    sqlite3 *handle = *static_cast<sqlite3 **>(v.data());
    if (handle) {
        // ...
    }
}

Этот фрагмент возвращает дескриптор для PostgreSQL или MySQL:

if (qstrcmp(v.typeName(), "PGconn*") == 0) {
    PGconn *handle = *static_cast<PGconn **>(v.data());
    if (handle) {
        // ...
    }
}

if (qstrcmp(v.typeName(), "MYSQL*") == 0) {
    MYSQL *handle = *static_cast<MYSQL **>(v.data());
    if (handle) {
        // ...
    }
}

См. также QSqlResult::handle().

[pure virtual] bool QSqlDriver::hasFeature(QSqlDriver::DriverFeature feature) const

Возвращает true если драйвер поддерживает функцию feature; в противном случае возвращает false.

Обратите внимание, что некоторые базы данных должны быть открыты() перед тем, как это можно определить.

См. также DriverFeature.

[virtual] bool QSqlDriver::isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const

Возвращает, является ли identifier экранированным в соответствии с правилами базы данных. identifier может быть именем таблицы или именем поля, в зависимости от type.

Переопределите эту функцию, если хотите предоставить собственную реализацию в вашем подклассе QSqlDriver.

См. также stripDelimiters() и escapeIdentifier().

[virtual] bool QSqlDriver::isOpen() const

Возвращает true если подключение к базе данных открыто; в противном случае возвращает false.

bool QSqlDriver::isOpenError() const

Возвращает true если при открытии подключения к базе данных произошла ошибка; в противном случае возвращает false.

QSqlError QSqlDriver::lastError() const

Возвращает объект QSqlError, содержащий информацию об последней ошибке, произошедшей в базе данных.

См. также setLastError().

[virtual, since 6.0] int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const

Возвращает максимальную длину идентификатора type в соответствии с настройками базы данных. По умолчанию возвращает INT_MAX, если для базы данных нет максимальной длины.

Эта функция была добавлена в Qt 6.0.

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

Возвращает текущую политику точности по умолчанию для подключения к базе данных.

См. также QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy(), и QSqlQuery::setNumericalPrecisionPolicy().

[pure virtual] bool QSqlDriver::open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString())

Производные классы должны переопределить эту чисто виртуальную функцию для открытия подключения к базе данных db, используя имя пользователя user, пароль password, хост host, порт port и параметры подключения options.

Функция должна возвращать true при успехе и false при ошибке.

См. также setOpen().

[virtual] QSqlIndex QSqlDriver::primaryIndex(const QString &tableName) const

Возвращает первичный индекс для таблицы tableName. Возвращает пустой QSqlIndex, если таблица не имеет первичного индекса. По умолчанию реализация возвращает пустой индекс.

[virtual] QSqlRecord QSqlDriver::record(const QString &tableName) const

Возвращает QSqlRecord, заполненный именами полей в таблице tableName. Если такая таблица не существует, возвращается пустой record. По умолчанию реализация возвращает пустой record.

[virtual] bool QSqlDriver::rollbackTransaction()

Эта функция используется для отката транзакции. Если успешно, возвращает true, в противном случае возвращает false. По умолчанию реализация ничего не делает и возвращает false.

См. также beginTransaction() и commitTransaction().

[virtual protected] void QSqlDriver::setLastError(const QSqlError &error)

Эта функция используется для установки значения последней ошибки error, произошедшей в базе данных.

См. также lastError().

void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

Устанавливает политику точности по умолчанию для чисел, используемую запросами, созданными этим драйвером, на precisionPolicy.

Примечание: Установка политики точности по умолчанию на precisionPolicy не влияет на активные запросы.

См. также QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy(), и QSqlQuery::numericalPrecisionPolicy().

[virtual protected] void QSqlDriver::setOpen(bool open)

Эта функция устанавливает состояние открытия базы данных на open. Производные классы могут использовать эту функцию для отчета о состоянии open().

См. также open() и setOpenError().

[virtual protected] void QSqlDriver::setOpenError(bool error)

Эта функция устанавливает состояние ошибки открытия базы данных на error. Производные классы могут использовать эту функцию для отчета о состоянии open(). Обратите внимание, что если error равно true, состояние открытия базы данных устанавливается в закрытое (т.е., isOpen() возвращает false).

См. также isOpenError(), open(), и setOpen().

[virtual] QString QSqlDriver::sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const

Возвращает SQL-запрос типа type для таблицы tableName со значениями из rec. Если preparedStatement равно true, строка будет содержать заглушки вместо значений.

Флаг, сгенерированный в каждом поле rec, определяет, включено ли поле в сгенерированный запрос.

Этот метод можно использовать для управления таблицами, не беспокоясь о зависимых от базы данных диалектах SQL. Для запросов без подготовки значения будут должным образом экранированы.

В операторе WHERE каждое ненулевое поле rec указывает условие фильтрации равенства значению поля или, при подготовке, заглушке. Однако, подготовлен запрос или нет, нулевое поле указывает условие IS NULL и никогда не вводит заглушку. Приложение не должно пытаться связать данные для нулевого поля во время выполнения. Поле должно быть установлено на какое-либо ненулевое значение, если требуется заглушка. Кроме того, поскольку ненулевые поля определяют условия равенства, а SQL NULL не равен ничему, даже самому себе, обычно не имеет смысла связывать NULL с заглушкой.

[virtual] QString QSqlDriver::stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const

Возвращает identifier с удаленными начальными и конечными разделителями. identifier может быть именем таблицы или именем поля, в зависимости от type. Если identifier не имеет начальных и конечных разделителей, identifier возвращается без изменений.

Переопределите эту функцию, если хотите предоставить собственную реализацию в вашем подклассе QSqlDriver.

См. также isIdentifierEscaped().

[virtual] bool QSqlDriver::subscribeToNotification(const QString &name)

Эта функция вызывается для подписки на уведомления об событиях из базы данных. name идентифицирует уведомление об событии.

При успешном выполнении верните true, в противном случае верните false.

База данных должна быть открыта при вызове этой функции. Когда база данных закрывается с помощью вызова close(), все подписки на уведомления об событиях автоматически отписываются. Обратите внимание, что вызов open() для уже открытой базы данных может неявно вызвать close(), что приведет к отписке драйвера от всех уведомлений об событиях.

Когда база данных публикует уведомление об событии, идентифицированное по name, посылается сигнал notification().

Переопределите эту функцию, если вы хотите предоставить поддержку уведомлений об событиях в собственном подклассе QSqlDriver,

См. также unsubscribeFromNotification(), subscribedToNotifications() и QSqlDriver::hasFeature().

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

Возвращает список имён уведомлений об событиях, на которые в настоящее время подписано.

Переопределите эту функцию, если вы хотите предоставить поддержку уведомлений об событиях в собственном подклассе QSqlDriver,

См. также subscribeToNotification() и unsubscribeFromNotification().

[virtual] QStringList QSqlDriver::tables(QSql::TableType tableType) const

Возвращает список имён таблиц в базе данных. По умолчанию возвращает пустой список.

Аргумент tableType описывает, какие типы таблиц должны быть возвращены. Из-за бинарной совместимости строка содержит значение перечисления QSql::TableTypes в текстовом формате. Для обратной совместимости пустая строка должна рассматриваться как QSql::Tables.

[virtual] bool QSqlDriver::unsubscribeFromNotification(const QString &name)

Эта функция используется для отписки от уведомлений об событиях из базы данных. name идентифицирует уведомление об событии.

При успешном выполнении верните true, в противном случае верните false.

База данных должна быть открыта при вызове этой функции. Все подписки на уведомления об событиях автоматически отписываются при вызове функции close().

После вызова этой функции сигнал notification() больше не будет генерироваться, когда база данных опубликует уведомление об событии, идентифицированное по name.

Переопределите эту функцию, если вы хотите предоставить поддержку уведомлений об событиях в собственном подклассе QSqlDriver,

См. также subscribeToNotification() и subscribedToNotifications().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qsqldriver.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API