QSqlDriver 类

The QSqlDriver class is an abstract base class for accessing specific SQL databases. 更多信息...

头文件 #include <QSqlDriver>
CMakefind_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmakeQT += sql
继承 QObject

公开类型

枚举DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries, …, CancelQuery }
枚举IdentifierType { FieldName, TableName }
枚举NotificationSource { UnknownSource, SelfSource, OtherSource }
枚举StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement }

公开函数

QSqlDriver(QObject *parent = nullptr)
虚拟~QSqlDriver()
虚拟 boolbeginTransaction()
虚拟 voidclose() = 0
虚拟 boolcommitTransaction()
虚拟 QSqlResult *createResult() const = 0
虚拟 QStringescapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const
虚拟 QStringformatValue(const QSqlField &field, bool trimStrings = false) const
虚拟 QVarianthandle() const
虚拟 boolhasFeature(QSqlDriver::DriverFeature feature) const = 0
虚拟 boolisIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const
虚拟 boolisOpen() const
boolisOpenError() const
QSqlErrorlastError() const
(since 6.0) 虚拟 intmaximumIdentifierLength(QSqlDriver::IdentifierType type) const
QSql::NumericalPrecisionPolicynumericalPrecisionPolicy() const
虚拟 boolopen(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0
虚拟 QSqlIndexprimaryIndex(const QString &tableName) const
虚拟 QSqlRecordrecord(const QString &tableName) const
虚拟 boolrollbackTransaction()
voidsetNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
虚拟 QStringsqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
虚拟 QStringstripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const
虚拟 boolsubscribeToNotification(const QString &name)
虚拟字符串列表subscribedToNotifications() const
虚拟字符串列表tables(QSql::TableType tableType) const
虚拟 boolunsubscribeFromNotification(const QString &name)

信号

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

受保护的函数

虚拟 voidsetLastError(const QSqlError &error)
虚拟 voidsetOpen(bool open)
虚拟 voidsetOpenError(bool error)

详细说明

此类不应直接使用。请使用 QSqlDatabase 替代。

如果您想创建自己的 SQL 驱动程序,可以创建此类的一个子类并重新实现其纯虚函数以及您需要的那些虚函数。有关更多信息,请参阅 如何编写自己的数据库驱动程序

另请参阅 QSqlDatabaseQSqlResult

成员类型文档

枚举 QSqlDriver::DriverFeature

此枚举包含驱动程序可能支持的功能列表。使用 hasFeature() 查询是否支持某些功能。

常量描述
QSqlDriver::Transactions0是否驱动程序支持 SQL 事务。
QSqlDriver::QuerySize1是否数据库能够报告查询的大小。注意,某些数据库不支持返回查询的大小(即返回的行数),在这种情况下,QSqlQuery::size() 将返回 -1。
QSqlDriver::BLOB2是否驱动程序支持二进制大对象字段。
QSqlDriver::Unicode3是否驱动程序支持 Unicode 字符串(如果数据库服务器支持)。
QSqlDriver::PreparedQueries4是否驱动程序支持预编译查询执行。
QSqlDriver::NamedPlaceholders5是否驱动程序支持使用命名占位符。
QSqlDriver::PositionalPlaceholders6是否驱动程序支持使用位置占位符。
QSqlDriver::LastInsertId7是否驱动程序支持返回最后触及行的 Id。
QSqlDriver::BatchOperations8是否驱动程序支持批量操作,请参阅 QSqlQuery::execBatch()。
QSqlDriver::SimpleLocking9是否驱动程序禁止在表上有其他查询的读锁时对表进行写锁。
QSqlDriver::LowPrecisionNumbers10是否驱动程序允许以低精度获取数值。
QSqlDriver::EventNotifications11是否驱动程序支持数据库事件通知。
QSqlDriver::FinishQuery12是否驱动程序在调用 QSqlQuery::finish() 时可以执行任何低级别的资源清理。
QSqlDriver::MultipleResultSets13是否驱动程序可以访问批量语句或存储过程返回的多个结果集。
QSqlDriver::CancelQuery14是否驱动程序允许取消正在运行的查询。

有关支持的功能的更多信息可以在Qt SQL 驱动文档中找到。

另请参阅hasFeature()。

枚举QSqlDriver::IdentifierType

此枚举包含SQL标识符类型列表。

常量描述
QSqlDriver::FieldName0一个SQL字段名
QSqlDriver::TableName1一个SQL表名

枚举QSqlDriver::NotificationSource

此枚举包含SQL通知源列表。

常量描述
QSqlDriver::UnknownSource0通知源是未知的
QSqlDriver::SelfSource1通知源是此连接
QSqlDriver::OtherSource2通知源是另一个连接

枚举QSqlDriver::StatementType

此枚举包含驱动程序可以创建的SQL语句(或子句)类型列表。

常量描述
QSqlDriver::WhereStatement0一个SQL WHERE 语句(例如,WHERE f = 5)。
QSqlDriver::SelectStatement1一个SQL SELECT 语句(例如,SELECT f FROM t)。
QSqlDriver::UpdateStatement2一个SQL UPDATE 语句(例如,UPDATE TABLE t set f = 1)。
QSqlDriver::InsertStatement3一个SQL INSERT 语句(例如,INSERT INTO t (f) values (1))。
QSqlDriver::DeleteStatement4一个SQL DELETE 语句(例如,DELETE FROM t)。

另请参阅sqlStatement()。

成员函数文档

[显式] QSqlDriver::QSqlDriver(QObject *parent = nullptr)

使用给定的 parent 创建一个新的驱动程序。

[虚 无异常] QSqlDriver::~QSqlDriver()

销毁对象并释放任何分配的资源。

[虚] bool QSqlDriver::beginTransaction()

调用此函数以开始事务。如果成功,则返回 true,否则返回 false。默认实现不执行任何操作并返回 false

另请参阅commitTransaction()和rollbackTransaction()。

[纯虚] void QSqlDriver::close()

派生类必须重新实现此纯虚函数以关闭数据库连接。成功时返回 true,失败时返回 false。

另请参阅open()和setOpen()。

[虚] bool QSqlDriver::commitTransaction()

调用此函数以提交事务。如果成功,则返回 true,否则返回 false。默认实现不执行任何操作并返回 false

另请参阅beginTransaction()和rollbackTransaction

[纯虚] QSqlResult *QSqlDriver::createResult() const

在数据库上创建一个空的SQL结果。派生类必须重新实现此函数并返回一个适合其数据库的QSqlResult对象给调用者。

[虚拟] QString QSqlDriver::escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const

根据数据库规则返回已转义的标识符。标识符可以是表名或字段名,这取决于type

默认实现不执行任何操作。

另请参阅isIdentifierEscaped

[虚拟] QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings = false) const

返回数据库中field值的字符串表示形式。这用于构建INSERT和UPDATE语句等。

默认实现根据以下规则返回格式化的值作为字符串

  • 如果field是字符数据,值被返回并包含在单引号内,这对于许多SQL数据库是适当的。任何嵌入的单引号都被转义(替换为两个单引号)。如果trimStrings为真(默认为假),则从该字段中删除所有尾随空白。
  • 如果field是日期/时间数据,值将按ISO格式格式化,并包含在单引号内。如果日期/时间数据无效,则返回“NULL”。
  • 如果字段是bytearray数据,并且可以编辑二进制字段,则值将格式化为十六进制字符串。
  • 对于任何其他字段类型,对其调用toString(),并返回该结果。

另请参阅QVariant::toString

[虚拟] QVariant QSqlDriver::handle() const

返回一个用QVariant包装的低级数据库句柄,如果没有句柄则返回一个无效变量。

警告:请务必小心使用此功能,并且只有在您知道您在做什么时才使用它。

警告:如果连接被修改(例如,如果关闭连接),则返回的句柄可能会成为过时的指针。

警告:如果连接尚未打开,则句柄可以为NULL。

此处返回的句柄数据库相关,在访问它之前应查询该变量的类型名称。

以下示例检索操作sqlite的连接句柄

QSqlDatabase db = QSqlDatabase::database();
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

[纯虚函数] bool QSqlDriver::hasFeature(QSqlDriver::DriverFeature feature) const

如果驱动程序支持特性feature,则返回 true;否则返回 false

请注意,某些数据库需要在open()之前才能确定这一点。

另请参阅DriverFeature

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

根据数据库规则返回标识符是否已转义。标识符可以是表名或字段名,具体取决于类型

如果你想在你自己的QSqlDriver子类中提供自己的实现,则重新实现此函数。

另请参阅 stripDelimiters() 和 escapeIdentifier

[虚函数] bool QSqlDriver::isOpen() const

如果数据库连接已打开,则返回 true;否则返回 false

bool QSqlDriver::isOpenError() const

如果在打开数据库连接时发生错误,则返回 true;否则返回 false

QSqlError QSqlDriver::lastError() const

返回一个QSqlError对象,其中包含有关数据库最后发生的错误的信息。

另请参阅 setLastError

[虚函数,自 6.0 版起] int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const

返回根据数据库设置确定标识符 类型 的最大长度。如果数据库没有最大值,则默认返回 INT_MAX。

此函数是在 Qt 6.0 中引入的。

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

当数据库发布驱动程序订阅的事件通知时,会发出此信号。name 确定事件通知,source 表示信号来源,payload 包含与通知一起可选提供的额外数据。

另请参阅 subscribeToNotification

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

返回数据库连接的当前默认精度策略。

另请参阅 QSql::NumericalPrecisionPolicysetNumericalPrecisionPolicyQSqlQuery::numericalPrecisionPolicyQSqlQuery::setNumericalPrecisionPolicy

[纯虚函数] 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().

[虚] QSqlIndex QSqlDriver::primaryIndex(const QString &tableName) const

返回表tableName的主索引。如果表没有主索引,则返回一个空的QSqlIndex。默认实现返回一个空索引。

[虚] QSqlRecord QSqlDriver::record(const QString &tableName) const

返回一个用表tableName中字段名称填充的QSqlRecord。如果没有这样的表,则返回一个空记录。默认实现返回一个空记录。

[虚] bool QSqlDriver::rollbackTransaction()

此函数用于回滚事务。成功时返回 true,否则返回 false。默认实现不执行任何操作并返回 false

参见beginTransaction() 和 commitTransaction().

[虚受保护] void QSqlDriver::setLastError(const QSqlError &error)

此函数用于设置在数据库上发生的最后错误error的值。

参见lastError().

void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

将此驱动程序创建的查询的默认数值精度策略设置为precisionPolicy

注意:将默认精度策略设置为precisionPolicy不会影响任何当前活动查询。

参见QSql::NumericalPrecisionPolicynumericalPrecisionPolicyQSqlQuery::setNumericalPrecisionPolicyQSqlQuery::numericalPrecisionPolicy

[虚受保护] void QSqlDriver::setOpen(bool open)

此函数设置数据库的打开状态为open。派生类可以使用此函数报告open的状态。

参见open() 和 setOpenError().

[虚受保护] void QSqlDriver::setOpenError(bool 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

返回类型为type的SQL语句,用于具有来自rec值的表tableName。如果preparedStatement为true,字符串将包含占位符而不是值。

rec的每个字段的生成标记确定该字段是否包含在生成的语句中。

此方法可以用来操作表,而不必关注数据库依赖的SQL方言。对于非预处理语句,值将被适当地转义。

在WHERE语句中,rec的每个非空字段指定一个等于字段值的过滤器条件,或者如果预处理,则为占位符。然而,无论是否预处理,空字段指定IS NULL条件,永远不会引入占位符。在执行期间,应用程序不得尝试为空字段绑定数据。如果需要占位符,字段必须设置为某些非空值。此外,由于非空字段指定相等条件,而SQL NULL不等于任何东西(包括它自己),因此通常没有将NULL绑定到占位符的必要。

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

返回去除了前缀和后缀分隔符的identifieridentifier可以是表名或字段名,这取决于type。如果identifier没有前缀和后缀分隔符字符,则返回未修改的identifier

如果你想在你自己的QSqlDriver子类中提供自己的实现,则重新实现此函数。

另请参阅isIdentifierEscaped

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

调用该函数以订阅来自数据库的事件通知。name标识事件通知。

如果成功,返回true,否则返回false。

调用该函数时,数据库必须是打开状态。当通过调用close()关闭数据库时,所有已订阅的事件通知将自动取消订阅。请注意,对已打开的数据库调用open()可能隐式调用close(),这将导致驱动程序取消订阅所有事件通知。

当数据库通过name发布标识的事件通知时,将发出notification()信号。

如果要为您的QSqlDriver子类提供事件通知支持,请重新实现此函数。

另请参阅 unsubscribeFromNotification()、subscribedToNotifications()以及QSqlDriver::hasFeature()。

[虚拟] QStringList QSqlDriver::subscribedToNotifications() const

返回当前已订阅的事件通知名称列表。

如果要为您的QSqlDriver子类提供事件通知支持,请重新实现此函数。

另请参阅 subscribeToNotification()和unsubscribeFromNotification()。

[虚拟] QStringList QSqlDriver::tables(QSql::TableType tableType) const

返回数据库中表名称的列表。默认实现返回空列表。

tableType参数描述应返回哪些类型的表。由于二进制兼容性,字符串包含枚举QSql::TableTypes的文本值。空字符串应作为向后兼容处理为QSql::Tables

[虚拟] bool QSqlDriver::unsubscribeFromNotification(const QString &name)

在调用此函数时,会从数据库取消事件通知。由name确定事件通知。

如果成功,返回true,否则返回false。

当调用该函数时,数据库必须处于打开状态。当调用close()函数时,所有已订阅的事件通知将自动取消订阅。

调用此函数后,当数据库张贴出由name标识的事件通知时,将不再发出notification信号。

如果要为您的QSqlDriver子类提供事件通知支持,请重新实现此函数。

另请参阅 subscribeToNotification()和subscribedToNotifications()。

© 2024 The Qt Company Ltd. 此处包含的文档贡献的版权归其各自所有者所有。此处提供的文档是根据由自由软件基金会出版的GNU自由文档许可协议版本1.3许可的。Qt及相应标志是The Qt Company Ltd在芬兰和其他国家和地区注册的商标。所有其他商标均为其各自所有者的财产。