Класс QSqlDriver
Класс QSqlDriver — это абстрактный базовый класс для доступа к конкретным базам данных SQL. Подробнее...
| Заголовок: | #include <QSqlDriver> |
| qmake: | QT += sql |
| Наследует: | QObject |
Типы публичного доступа
| Перечисление | DbmsType { UnknownDbms, MSSqlServer, MySqlServer, PostgreSQL, ..., DB2 } |
| Перечисление | DriverFeature { Transactions, QuerySize, BLOB, Unicode, ..., CancelQuery } |
| Перечисление | IdentifierType { FieldName, TableName } |
| Перечисление | NotificationSource { UnknownSource, SelfSource, OtherSource } |
| Перечисление | StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement } |
Открытые функции
| QSqlDriver(QObject *parent = Q_NULLPTR) | |
| ~QSqlDriver() | |
| virtual bool | beginTransaction() |
| virtual void | close() = 0 |
| virtual bool | commitTransaction() |
| virtual QSqlResult * | createResult() const = 0 |
| DbmsType | dbmsType() const |
| virtual QString | escapeIdentifier(const QString &identifier, IdentifierType type) const |
| virtual QString | formatValue(const QSqlField &field, bool trimStrings = false) const |
| virtual QVariant | handle() const |
| virtual bool | hasFeature(DriverFeature feature) const = 0 |
| virtual bool | isIdentifierEscaped(const QString &identifier, IdentifierType type) const |
| virtual bool | isOpen() const |
| bool | isOpenError() const |
| QSqlError | lastError() const |
| QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
| virtual 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 |
| virtual QSqlIndex | primaryIndex(const QString &tableName) const |
| virtual QSqlRecord | record(const QString &tableName) const |
| virtual bool | rollbackTransaction() |
| void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
| virtual QString | sqlStatement(StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const |
| virtual QString | stripDelimiters(const QString &identifier, IdentifierType type) const |
| virtual bool | subscribeToNotification(const QString &name) |
| virtual QStringList | subscribedToNotifications() const |
| virtual QStringList | tables(QSql::TableType tableType) const |
| virtual 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
Защищенные функции
| virtual void | setLastError(const QSqlError &error) |
| virtual void | setOpen(bool open) |
| virtual void | setOpenError(bool error) |
- 9 защищенных функций унаследованы от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 11 статических открытых членов унаследованы от QObject
Подробное описание
Класс QSqlDriver — это абстрактный базовый класс для доступа к конкретным базам данных SQL.
Этот класс не предназначен для прямого использования. Используйте класс QSqlDatabase вместо него.
Если вы хотите создать свой собственный драйвер SQL, вы можете создать подкласс этого класса и переопределить его чистые виртуальные функции и те виртуальные функции, которые вам необходимы. См. Как написать свой собственный драйвер базы данных для получения дополнительной информации.
См. также QSqlDatabase и QSqlResult.
Документация по типам членов
Перечисление QSqlDriver::DbmsType
Это перечисление содержит типы СУБД.
| Константа | Значение |
|---|---|
QSqlDriver::UnknownDbms |
0 |
QSqlDriver::MSSqlServer |
1 |
QSqlDriver::MySqlServer |
2 |
QSqlDriver::PostgreSQL |
3 |
QSqlDriver::Oracle |
4 |
QSqlDriver::Sybase |
5 |
QSqlDriver::SQLite |
6 |
QSqlDriver::Interbase |
7 |
QSqlDriver::DB2 |
8 |
enum 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().
enum QSqlDriver::IdentifierType
Этот перечисление содержит список типов идентификаторов SQL.
| Константа | Значение | Описание |
|---|---|---|
QSqlDriver::FieldName |
0 |
Имя поля SQL |
QSqlDriver::TableName |
1 |
Имя таблицы SQL |
enum QSqlDriver::NotificationSource
Этот перечисление содержит список источников уведомлений SQL.
| Константа | Значение | Описание |
|---|---|---|
QSqlDriver::UnknownSource |
0 |
Источник уведомления неизвестен |
QSqlDriver::SelfSource |
1 |
Источник уведомления — это подключение |
QSqlDriver::OtherSource |
2 |
Источник уведомления — другое подключение |
enum 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()
Удаляет объект и освобождает выделенные ресурсы.
[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, подходящий для их базы данных.
DbmsType QSqlDriver::dbmsType() const
Возвращает текущий тип СУБД для подключения к базе данных.
Эта функция была добавлена в Qt 5.4.
[virtual] QString QSqlDriver::escapeIdentifier(const QString &identifier, 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 содержит данные типа bytearray, и драйвер может редактировать двоичные поля, значение форматируется как шестнадцатеричная строка.
- Для любого другого типа поля вызывается toString() для его значения, и результат возвращается.
См. также QVariant::toString().
END_OF_DOCUMENT_MARKER
[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(DriverFeature feature) const
Возвращает true, если драйвер поддерживает функцию feature; в противном случае возвращает false.
Обратите внимание, что некоторые базы данных должны быть открыты() перед тем, как это можно определить.
См. также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 перегружен в этом классе. Чтобы подключиться к этому сигналу, используя синтаксис указателя функции, необходимо указать тип сигнала в статическом приведении, как показано в этом примере:
connect(sqlDriver, static_cast<void(QSqlDriver::*)(const QString &)>(&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 перегружен в этом классе. Чтобы подключиться к этому сигналу, используя синтаксис указателя функции, необходимо указать тип сигнала в статическом приведении, как показано в этом примере:
connect(sqlDriver, static_cast<void(QSqlDriver::*)(const QString &, QSqlDriver::NotificationSource, const QVariant &)>(&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. Если такая таблица не существует, возвращается пустой рекорд. Реализация по умолчанию возвращает пустой рекорд.
[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(StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
Возвращает SQL-запрос типа type для таблицы tableName со значениями из rec. Если preparedStatement равно true, строка будет содержать заглушки вместо значений.
Этот метод может использоваться для работы с таблицами, не беспокоясь о зависимых от базы данных диалектах SQL. Для неподготовленных запросов значения будут корректно экранированы.
В операторе WHERE каждое поле rec, отличное от NULL, задаёт условие фильтрации, равное значению поля, или, если подготовлено, заполнитель. Однако, подготовлено ли оно или нет, поле со значением NULL задаёт условие IS NULL и никогда не вводит заполнитель. Приложение не должно пытаться привязать данные для поля со значением NULL во время выполнения. Поле должно быть установлено в какое-либо ненулевое значение, если требуется заполнитель. Кроме того, поскольку поля, отличные от 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/archives/qt-5.6/qsqldriver.html