Spec-Zone.ru › Qt 5.11

Класс 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 = 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
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)
  • 34 общедоступных функций унаследованы от 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
  • 1 общедоступная переменная унаследована от QObject
  • 10 статических общедоступных членов унаследованы от QObject
  • 2 защищённые переменные унаследованы от 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 Поддерживает ли драйвер возвращение 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.

[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), все trailing пробелы удаляются из поля.
  • Если field — данные даты/времени, значение отформатировано в формате ISO и заключено в одинарные кавычки. Если данные даты/времени некорректны, возвращается "NULL".
  • Если field — данные типа qbytearray, и драйвер может редактировать двоичные поля, значение отформатировано в виде шестнадцатеричной строки.
  • Для любого другого типа поля вызывается toString() для его значения, и возвращается результат.

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

[virtual] 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(QSqlDriver::DriverFeature feature) const

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

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

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

[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 имеет значение 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 не равен ничему, даже себе, связывание нулевого значения с заполнителем, как правило, не имеет смысла.

[virtual] QString QSqlDriver::stripDelimiters(const QString &identifier, QSqlDriver::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/archives/qt-5.11/qsqldriver.html

Spec-Zone.ru

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