Spec-Zone.ru › Qt 5.9

Класс QSqlDriver

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

Заголовок: #include <QSqlDriver>
qmake: QT += sql
Наследуется от: QObject
  • Список всех членов, включая унаследованные

Открытые типы

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

Открытые функции

QSqlDriver(QObject *parent = Q_NULLPTR)
~QSqlDriver()
виртуальная bool beginTransaction()
виртуальная void close() = 0
виртуальная bool commitTransaction()
виртуальный QSqlResult * createResult() const = 0
виртуальная QString escapeIdentifier(const QString &identifier, IdentifierType type) const
виртуальная QString formatValue(const QSqlField &field, bool trimStrings = false) const
виртуальная QVariant handle() const
виртуальная bool hasFeature(DriverFeature feature) const = 0
виртуальная bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const
виртуальная bool isOpen() const
bool isOpenError() const
QSqlError lastError() 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(StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
виртуальная QString stripDelimiters(const QString &identifier, IdentifierType type) const
виртуальная bool subscribeToNotification(const QString &name)
виртуальная QStringList subscribedToNotifications() const
виртуальная QStringList tables(QSql::TableType tableType) const
виртуальная bool unsubscribeFromNotification(const QString &name)
  • 32 открытых функций унаследовано от QObject

Сигналы

void notification(const QString &name)
void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)
  • 2 сигнала унаследовано от QObject

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

виртуальная void setLastError(const QSqlError &error)
виртуальная void setOpen(bool open)
виртуальная void setOpenError(bool error)
  • 9 защищенных функций унаследовано от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследовано от QObject
  • 11 статических открытых членов унаследовано от QObject

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

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

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

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

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

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

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

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

Постоянная Значение Описание
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 Поддерживает ли драйвер возврат идентификатора последней изменённой строки.
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 = Q_NULLPTR)

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

QSqlDriver::~QSqlDriver()

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

beginTransaction()bool QSqlDriver::beginTransaction()

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

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

close()void QSqlDriver::close()

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

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

commitTransaction()bool QSqlDriver::commitTransaction()

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

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

createResult()QSqlResult *QSqlDriver::createResult() const

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

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

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

По умолчанию ничего не делает.

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

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

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

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

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

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

handle()QVariant QSqlDriver::handle() const

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

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

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

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

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

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

QSqlDatabase db = ...;
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 != 0) { // check that it is not NULL
        ...
    }
}

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

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

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

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

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

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

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

См. также DriverFeature.

[virtual] bool QSqlDriver::isIdentifierEscaped(const QString &identifier, 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().

[signal] void QSqlDriver::notification(const QString &name)

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

Примечание: Сигнал notification перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную функцию для получения указателя на функцию, как показано в этом примере:

connect(sqlDriver, QOverload<const QString &>::of(&QSqlDriver::notification),
    [=](const QString &name){ /* ... */ });

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

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

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

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

Примечание: Сигнал notification перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную функцию для получения указателя на функцию, как показано в этом примере:

connect(sqlDriver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification),
    [=](const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload){ /* ... */ });

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

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

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

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

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

См. также 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 не влияет на активные запросы.

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

См. также 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 истинно, состояние открытия базы данных устанавливается в закрытое (т.е., isOpen() возвращает false).

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

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

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

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

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

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

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

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

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

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

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

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

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

В случае успеха возвращает true, в противном случае — false.

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

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

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

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

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

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

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

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

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

См. также 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.

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

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

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

Spec-Zone.ru

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