Spec-Zone.ru › Qt 5.13

Класс QSqlDriver

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

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

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

Перечисление DriverFeature { Transactions, QuerySize, BLOB, Unicode, ..., CancelQuery }
Перечисление IdentifierType { ИмяПоля, ИмяТаблицы }
Перечисление NotificationSource { UnknownSource, SelfSource, OtherSource }
Перечисление StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement }

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

QSqlDriver(QObject *parent = nullptr)
virtual ~QSqlDriver()
virtual bool beginTransaction()
virtual void close() = 0
virtual bool commitTransaction()
virtual QSqlResult * createResult() const = 0
virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const
virtual QVariant handle() const
virtual bool hasFeature(QSqlDriver::DriverFeature feature) const = 0
virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::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(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
virtual QString stripDelimiters(const QString &identifier, QSqlDriver::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)

Сигналы

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

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

virtual void setLastError(const QSqlError &error)
virtual void setOpen(bool open)
virtual 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] 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().

[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().

[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().

END_OF_DOCUMENT_MARKER

[virtual] 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().

[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.

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

См. также DriverFeature.

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

Возвращает значение true, если 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().

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 каждое не-NULL поле 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.13/qsqldriver.html

Spec-Zone.ru

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