QSqlResult 类

QSqlResult 类提供了一种访问特定 SQL 数据库数据的高级接口。 更多...

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

公共函数

虚拟~QSqlResult()
虚拟 QVarianthandle() const

受保护的类型

枚举BindingSyntax { PositionalBinding, NamedBinding }

受保护的函数

QSqlResult(const QSqlDriver *db)
voidaddBindValue(const QVariant &val, QSql::ParamType paramType)
intat() const
虚拟 voidbindValue(int index, const QVariant &val, QSql::ParamType paramType)
虚拟 voidbindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
QSql::ParamTypebindValueType(int index) const
QSql::ParamTypebindValueType(const QString &placeholder) const
QSqlResult::BindingSyntaxbindingSyntax() const
QVariantboundValue(int index) const
QVariantboundValue(const QString &placeholder) const
intboundValueCount() const
QStringboundValueName(int index) const
QStringListboundValueNames() const
QVariantListboundValues() const
QVariantList &boundValues()
voidclear()
虚拟 QVariantdata(int index) = 0
const QSqlDriver *driver() const
虚拟 boolexec()
QStringexecutedQuery() const
虚拟 boolfetch(int index) = 0
虚拟 boolfetchFirst() = 0
虚拟 boolfetchLast() = 0
虚拟 boolfetchNext()
虚拟 boolfetchPrevious()
boolhasOutValues() const
boolisActive() const
boolisForwardOnly() const
虚拟 boolisNull(int index) = 0
boolisSelect() const
boolisValid() const
QSqlErrorlastError() const
虚拟 QVariantlastInsertId() const
QStringlastQuery() const
virtual intnumRowsAffected() = 0
虚拟 boolprepare(const QString &query)
virtual QSqlRecordrecord() const
虚拟 boolreset(const QString &query) = 0
voidresetBindCount()
虚拟 boolsavePrepare(const QString &query)
虚拟 voidsetActive(bool active)
虚拟 voidsetAt(int index)
虚拟 voidsetForwardOnly(bool forward)
虚拟 voidsetLastError(const QSqlError &error)
虚拟 voidsetQuery(const QString &query)
虚拟 voidsetSelect(bool select)
virtual intsize() = 0

详细说明

通常,您会使用QSqlQuery而不是QSqlResult,因为QSqlQuery提供了对数据库特定QSqlResult实现的通用包装。

如果您正在实现自己的SQL驱动程序(通过子类化QSqlDriver),则需要提供自己的QSqlResult子类以实现所有纯虚函数和其他所需的虚拟函数。

另请参阅 QSqlDriver

成员类型文档

enum QSqlResult::BindingSyntax

此枚举类型指定了指定准备查询中占位符的不同语法。

常量描述
QSqlResult::PositionalBinding0使用ODBC样式位置语法,用“?”作为占位符。
QSqlResult::NamedBinding1使用Oracle样式语法,带有命名占位符(如“:id”)

另请参阅 bindingSyntax

成员函数文档

[显式受保护] QSqlResult::QSqlResult(const QSqlDriver *db)

使用数据库驱动程序db创建QSqlResult。对象初始化为非活动状态。

另请参阅 isActive()和driver

[虚,noexcept] QSqlResult::~QSqlResult()

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

[受保护] void QSqlResult::addBindValue(const QVariant &val, QSql::ParamType paramType)

将参数类型为paramType的值val绑定到当前记录(行)的下一个可用位置。

另请参阅 bindValue

[受保护] int QSqlResult::at() const

返回结果的当前(基于零)行位置。可能会返回特殊值QSql::BeforeFirstRowQSql::AfterLastRow

另请参阅 setAt()和isValid

[虚拟受保护] void QSqlResult::bindValue(int index, const QVariant &val, QSql::ParamType paramType)

将参数类型为 paramType 的值 val 绑定到当前记录(行)中位置 index

另请参阅addBindValue

[虚拟受保护] void QSqlResult::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)

这是重载函数。

将参数类型为 paramType 的值 val 绑定到当前记录(行)中的 placeholder 名称。

注意:绑定未定义的占位符将导致未定义的行为。

另请参阅QSqlQuery::bindValue

[受保护] QSql::ParamType QSqlResult::bindValueType(int index) const

返回在位置 index 绑定的值的参数类型。

另请参阅boundValue

[受保护] QSql::ParamType QSqlResult::bindValueType(const QString &placeholder) const

这是重载函数。

返回给定 placeholder 名称绑定的值的参数类型。

[受保护] QSqlResult::BindingSyntax QSqlResult::bindingSyntax() const

返回预编译查询所使用的绑定语法。

[受保护] QVariant QSqlResult::boundValue(int index) const

返回当前记录(行)中位置 index 绑定的值。

另请参阅bindValue() 和 boundValues

[受保护] QVariant QSqlResult::boundValue(const QString &placeholder) const

这是重载函数。

返回当前记录(行)中由给定的 placeholder 名称绑定的值。

另请参阅bindValueType

[受保护] int QSqlResult::boundValueCount() const

返回结果中绑定的值的数量。

另请参阅boundValues

[受保护] QString QSqlResult::boundValueName(int index) const

返回当前记录(行)中位置 index 绑定的值的名称。

另请参阅 boundValue() 和 boundValueNames

[保护] QStringList QSqlResult::boundValueNames() const

返回所有绑定值的名称。

另请参阅 boundValue() 和 boundValueName

[保护] QVariantList QSqlResult::boundValues() const

返回当前记录(行)的结果绑定值的列表。

另请参阅 boundValueCount

[保护] QVariantList &QSqlResult::boundValues()

这是重载函数。

返回对当前记录(行)的结果绑定值列表的可变引用。

另请参阅 boundValueCount

[保护] void QSqlResult::clear()

清除整个结果集并释放任何相关资源。

[纯虚保护] QVariant QSqlResult::data(int index)

将当前行中的字段 index 的数据作为 QVariant 返回。只有当结果处于活动状态,定位在有效的记录上,并且 index 为非负数时,此函数才会被调用。派生类必须实现此函数并返回字段 index 的值,或者如果无法确定则返回 QVariant()。

[保护] const QSqlDriver *QSqlResult::driver() const

返回与结果关联的驱动程序。这是传递给构造函数的对象。

[虚拟保护] bool QSqlResult::exec()

执行查询,如果成功则返回 true;否则返回 false。

另请参阅 prepare

[保护] QString QSqlResult::executedQuery() const

返回实际执行的查询。这可能不同于传递的查询,例如如果使用了准备好的查询并且底层数据库不支持准备好的查询。

另请参阅 exec() 和 setQuery

[纯虚保护] bool QSqlResult::fetch(int index)

将结果定位到任意(基于0)行 index

只能调用时结果处于活动状态。派生类必须实现此函数并将结果定位到行 index,并使用适当的值调用 setAt()。返回 true 表示成功,或返回 false 表示失败。

另请参阅 isActive()、fetchFirst()、fetchLast()、fetchNext() 和 fetchPrevious).

[纯虚受保护的] bool QSqlResult::fetchFirst()

将结果定位到结果中的第一条记录(行0)。

只有在结果处于活动状态时,才会调用此函数。派生类必须重新实现此函数,将结果定位到第一条记录,并使用适当的值调用 setAt()。返回 true 表示成功,返回 false 表示失败。

另请参阅 fetch() 和 fetchLast).

[纯虚受保护的] bool QSqlResult::fetchLast()

将结果定位到结果中的最后一条记录(最后一行)。

只有在结果处于活动状态时,才会调用此函数。派生类必须重新实现此函数,将结果定位到最后一条记录,并使用适当的值调用 setAt()。返回 true 表示成功,返回 false 表示失败。

另请参阅 fetch() 和 fetchFirst).

[虚受保护的] bool QSqlResult::fetchNext()

将结果定位到结果中下一个可用的记录(行)。

只有在结果处于活动状态时,才会调用此函数。默认实现使用下一个索引调用 fetch()。派生类可以重新实现此函数,以其他方式将结果定位到下一条记录,并使用适当的值调用 setAt()。返回 true 表示成功,返回 false 表示失败。

另请参阅 fetch() 和 fetchPrevious).

[虚受保护的] bool QSqlResult::fetchPrevious()

将结果定位到结果中的上一条记录(行)。

只有在结果处于活动状态时,才会调用此函数。默认实现使用上一个索引调用 fetch()。派生类可以重新实现此函数,以其他方式将结果定位到下一条记录,并使用适当的值调用 setAt()。返回 true 表示成功,返回 false 表示失败。

[虚] QVariant QSqlResult::handle() const

返回此结果集的低级数据库句柄,包装在 QVariant 中,如果没有句柄则返回无效的 QVariant

警告: 请务必谨慎使用,并且只有当您知道自己在做什么时才使用。

警告: 如果修改了结果(例如,您清除它),则返回的句柄可能会变为过时指针。

警告: 如果结果尚未执行,该句柄可能为 NULL。

警告: PostgreSQL:在单向模式下,调用QSqlResult的句柄在fetch(),fetchFirst(),fetchLast(),fetchNext(),fetchPrevious(),nextResult()后可能改变。

返回的句柄依赖于数据库,您在访问它之前应该查询其类型名。

此示例检索sqlite结果的句柄

QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);

QVariant v = query.result()->handle();
if (v.isValid() && qstrcmp(v.typeName(), "sqlite3_stmt*") == 0) {
    // v.data() returns a pointer to the handle
    sqlite3_stmt *handle = *static_cast<sqlite3_stmt **>(v.data());
    if (handle) {
        // ...
    }
}

此片段返回PostgreSQL或MySQL的句柄

if (qstrcmp(v.typeName(), "PGresult*") == 0) {
    PGresult *handle = *static_cast<PGresult **>(v.data());
    if (handle) {
        // ...
        }
}

if (qstrcmp(v.typeName(), "MYSQL_STMT*") == 0) {
    MYSQL_STMT *handle = *static_cast<MYSQL_STMT **>(v.data());
    if (handle) {
        // ...
        }
    }

另请参阅QSqlDriver::handle

[protected] bool QSqlResult::hasOutValues() const

如果查询的至少一个绑定值是QSql::OutQSql::InOut,则返回true;否则返回false

另请参阅bindValueType

[protected] bool QSqlResult::isActive() const

如果结果包含要检索的记录,则返回true;否则返回false

[protected] bool QSqlResult::isForwardOnly() const

如果您只能向前滚动结果集,则返回true;否则返回false

另请参阅setForwardOnly

[pure virtual protected] bool QSqlResult::isNull(int index)

如果当前行中的位置

[protected] bool QSqlResult::isSelect() const

如果当前结果是来自SELECT语句的,则返回true;否则返回false

另请参阅setSelect

[protected] bool QSqlResult::isValid() const

如果结果位于有效记录上(即,结果不在第一个或最后一个记录之前),则返回truefalse

另请参阅at

[protected] QSqlError QSqlResult::lastError() const

返回与结果关联的最后一个错误。

另请参阅setLastError

[virtual protected] QVariant QSqlResult::lastInsertId() const

如果数据库支持,则返回最近插入行的对象ID。如果查询没有插入任何值或数据库没有报告ID,则返回无效的QVariant。如果插入操作触动了多行,则操作行为是未定义的。

请注意,对于Oracle数据库,将返回行的ROWID,而对于MySQL数据库,将返回行的自动递增字段。

另请参阅QSqlDriver::hasFeature

[受保护] QString QSqlResult::lastQuery() const

返回当前 SQL 查询文本,如果没有则返回空字符串。

另请参阅setQuery

[纯虚受保护] int QSqlResult::numRowsAffected()

返回最后一次执行的查询影响的行数,如果无法确定或查询为 SELECT 语句,则返回 -1。

另请参阅size

[虚受保护] bool QSqlResult::prepare(const QString &query)

准备给定 query 以供执行;通常查询将使用占位符,以便可以重复执行。如果查询准备成功,则返回 true;否则返回 false

另请参阅exec

[虚受保护] QSqlRecord QSqlResult::record() const

如果查询处于活动状态,则返回当前记录;否则返回一个空的 QSqlRecord

默认实现总是返回一个空的 QSqlRecord

另请参阅isActive

[纯虚受保护] bool QSqlResult::reset(const QString &query)

将结果设置为使用 SQL 语句 query 进行后续数据检索。

派生类必须实现此函数并将 query 应用到数据库。此函数在将结果设置为不活动状态并将指针定位在新结果的第一条记录之前调用。派生类如果查询成功且可用,则应返回 true,否则返回 false。

另请参阅setQuery

[受保护] void QSqlResult::resetBindCount()

重置绑定参数的数量。

[虚受保护] bool QSqlResult::savePrepare(const QString &query)

尝试使用底层数据库功能准备给定的 query。如果查询成功准备,则返回 true;否则返回 false

注意:此方法本应称为 "safePrepare()"。

另请参阅 prepare

[虚受保护] void QSqlResult::setActive(bool active)

此函数为派生类提供,用于将内部活动状态设置为 active

另请参阅isActive

[虚受保护] void QSqlResult::setAt(int index)

此函数为派生类提供,用于设置内部(基于零的)行位置为 index

另请参阅at

[虚受保护] void QSqlResult::setForwardOnly(bool forward)

将向前只读模式设置为 forward。如果 forward 为真,则只允许使用 fetchNext() 来浏览结果。由于结果不需要缓存,因此向前只读模式需要的内存较少。默认情况下,此功能是禁用的。

将向前只读设置为假是向数据库引擎的建议,数据库引擎将最终决定结果集是向前只读还是可滚动的。 isForwardOnly() 将始终返回结果集的正确状态。

注意:在查询执行后调用 setForwardOnly 至少会产生意外结果,在最坏的情况下会导致崩溃。

注意:为了确保向前只读查询成功完成,应用程序应该在执行查询和浏览查询结果后都检查 lastError() 是否存在错误。

警告:在 PostgreSQL 中,当在向前只读模式下浏览查询结果时,不要在同一个数据库连接上执行任何其他 SQL 命令。这将导致查询结果丢失。

另请参阅:isForwardOnly(),fetchNext() 以及 QSqlQuery::setForwardOnly()。

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

此函数为派生类提供,用于设置 error 为最后错误。

另请参阅:lastError()。

[虚保护] void QSqlResult::setQuery(const QString &query)

将结果集的当前查询设置为 query。您必须调用 reset() 来执行数据库中的查询。

另请参阅:reset() 和 lastQuery()。

[虚保护] void QSqlResult::setSelect(bool select)

此函数为派生类提供,用于指示当前语句是否为 SQL SELECT 语句。如果语句是 SELECT 语句,则 select 参数应为 true;否则应为 false。

另请参阅:isSelect()。

[纯虚保护] int QSqlResult::size()

返回 SELECT 结果的大小,或者如果无法确定或查询不是 SELECT 语句时返回 -1。

另请参阅:numRowsAffected()。

© 2024 Qt 公司有限公司。本文档内的文档贡献是各自所有者的版权。本文档提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 许可的。Qt 和相应标志是芬兰的 Qt 公司有限公司和/或世界其他地区的商标。所有其他商标均为各自所有者的财产。