Класс QSqlDriver
Класс QSqlDriver — это абстрактный базовый класс для доступа к конкретным базам данных SQL. Подробнее...
| Заголовок: | #include <QSqlDriver> |
| qmake: | QT += sql |
| Наследует: | QObject |
Публичные типы
| Перечисление | DriverFeature { Транзакции, Размер запроса, BLOB, Unicode, ..., Отмена запроса } |
| Перечисление | 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) |
- 31 публичная функция унаследована от QObject
Сигналы
| void | notification(const QString &name) |
| void | notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload) |
- 2 сигнала унаследованы от QObject
Статические публичные члены
| const QMetaObject | staticMetaObject |
- 9 статических публичных членов унаследованы от QObject
Защищенные функции
| виртуальный void | setLastError(const QSqlError &error) |
| виртуальный void | setOpen(bool open) |
| виртуальный void | setOpenError(bool error) |
- 9 защищенных функций унаследованы от 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 — при ошибке.
[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) {
...
}
} Этот фрагмент возвращает ручку для 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.
Обратите внимание, что для некоторых баз данных необходимо выполнить 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 не равно ничему, даже самому себе, привязка 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/qt-5.12/qsqldriver.html