QSqlField 类

QSqlField 类处理 SQL 数据库表和视图的字段。 更多...

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

公共类型

枚举RequiredStatus { Required, Optional, Unknown }

公共函数

(自 6.0) QSqlField(const QString &fieldName = QString(), QMetaType type = QMetaType(), const QString &table = QString())
QSqlField(const QSqlField &other)
~QSqlField()
voidclear()
QVariantdefaultValue() const
boolisAutoValue() const
boolisGenerated() const
boolisNull() const
boolisReadOnly() const
boolisValid() const
intlength() const
QMetaTypemetaType() const
QStringname() const
intprecision() const
QSqlField::RequiredStatusrequiredStatus() const
voidsetAutoValue(bool autoVal)
voidsetDefaultValue(const QVariant &value)
voidsetGenerated(bool gen)
voidsetLength(int fieldLength)
voidsetMetaType(QMetaType type)
voidsetName(const QString &name)
voidsetPrecision(int precision)
voidsetReadOnly(bool readOnly)
voidsetRequired(bool required)
voidsetRequiredStatus(QSqlField::RequiredStatus required)
voidsetTableName(const QString &table)
voidsetValue(const QVariant &value)
(自 6.6) voidswap(QSqlField &other)
QStringtableName() const
QVariantvalue() const
booloperator!=(const QSqlField &other) const
QSqlField &operator=(const QSqlField &other)
booloperator==(const QSqlField &other) const

详细信息

QSqlField表示数据库表或视图单列的特征,例如数据类型和列名。字段还包含数据库列的值,这些值可以查看或更改。

字段数据值存储为QVariants。不允许使用不兼容的类型。例如

    QSqlField field("age", QMetaType::fromType<int>());
    field.setValue(QPixmap());  // WRONG

但是,如果可能的话,字段将尝试将某些数据类型转换为字段数据类型

    QSqlField field("age", QMetaType::fromType<int>());
    field.setValue(QString("123"));  // casts QString to int

QSqlField对象很少在应用程序代码中明确创建。它们通常通过已经包含字段列表的QSqlRecord间接访问。例如

    QSqlQuery query;
    ...
    QSqlRecord record = query.record();
    QSqlField field = record.field("country");

A QSqlField对象可以提供有关字段的某些元数据,例如其name()、variant type()、length()、precision()、defaultValue()、typeID(),以及其requiredStatus()、isGenerated()和isReadOnly()。可以检查字段的数据以查看它是否isNull(),并检索其value()。当编辑数据时,可以通过setValue()设置值或使用clear()将其设置为NULL。

参见 QSqlRecord

成员类型文档

枚举 QSqlField::RequiredStatus

指定字段是必需的还是可选的。

常数描述
QSqlField::Required1插入记录时必须指定字段。
QSqlField::Optional0插入记录时不需要指定字段。
QSqlField::Unknown-1数据库驱动程序无法确定字段是必需的还是可选的。

参见 requiredStatus

成员函数文档

[显式,自6.0起] QSqlField::QSqlField(const QString &fieldName = QString(), QMetaType type = QMetaType(), const QString &table = QString())

这是一个重载函数。

table中创建一个类型为type的空字段fieldName

此函数自Qt 6.0引入。

参见 setRequiredStatussetLengthsetPrecisionsetDefaultValuesetGeneratedsetReadOnly

QSqlField::QSqlField(const QSqlField &other)

构造other的副本。

[noexcept] QSqlField::~QSqlField()

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

void QSqlField::clear()

清除字段值并将其设置为NULL。如果字段为只读,则不执行任何操作。

参见 setValueisReadOnlyrequiredStatus

QVariant QSqlField::defaultValue() const

返回字段的默认值(可能为NULL)。

另请参阅 setDefaultValue(),metaType(),requiredStatus(),length(),precision(),以及isGenerated()。

bool QSqlField::isAutoValue() const

如果值是由数据库自动生成的,则返回true,例如自动递增主键值。

注意:由于ODBC API的限制,当使用ODBC驱动程序时,isAutoValue()字段仅在通过执行SELECT查询获得的QSqlField中填充,从QSqlRecord获得的QSqlField以及在QSqlDatabase::record()或QSqlDatabase::primaryIndex()中返回的结果中为false

另请参阅 setAutoValue()。

bool QSqlField::isGenerated() const

如果字段是生成的,则返回true;否则返回false。

另请参阅 setGenerated(),metaType(),requiredStatus(),length(),precision(),以及defaultValue()。

bool QSqlField::isNull() const

如果字段值为NULL,则返回true;否则返回false。

另请参阅 value()。

bool QSqlField::isReadOnly() const

如果字段值是只读的,则返回true;否则返回false。

另请参阅 setReadOnly(),metaType(),requiredStatus(),length(),precision(),以及defaultValue()。

bool QSqlField::isValid() const

如果字段的variant类型是有效的,则返回true;否则返回false

int QSqlField::length() const

返回字段的长度。

如果返回的值是负数,则表示信息无法从数据库中获取。

另请参阅 setLength(),metaType(),requiredStatus(),precision(),defaultValue(),以及isGenerated()。

QMetaType QSqlField::metaType() const

返回存储在数据库中的字段类型。请注意,实际值可能具有不同的类型,数值太大而无法存储在long int或double中时,通常以字符串形式存储以防止精度损失。

另请参阅 setMetaType()。

QString QSqlField::name() const

返回字段的名称。

另请参阅setName().

int QSqlField::precision() const

返回字段的精度,这仅对数值类型有意义。

如果返回的值是负数,则表示信息无法从数据库中获取。

另请参阅setPrecision(), metaType(), requiredStatus(), length(), defaultValue() 和 isGenerated().

QSqlField::RequiredStatus QSqlField::requiredStatus() const

如果这是一个必填字段,则返回 true;否则返回 false。如果必填字段没有值,则 INSERT 将失败。

另请参阅setRequiredStatus(), metaType(), length(), precision(), defaultValue() 和 isGenerated().

void QSqlField::setAutoValue(bool autoVal)

如果 autoVal 为真,则将字段标记为自动生成的值。

另请参阅isAutoValue().

void QSqlField::setDefaultValue(const QVariant &value)

将此字段的默认值设置为 value

另请参阅defaultValue(), value(), setMetaType(), setRequiredStatus(), setLength(), setPrecision(), setGenerated(), 和 setReadOnly().

void QSqlField::setGenerated(bool gen)

设置生成状态。如果 gen 为假,则不会为该字段生成 SQL;否则,Qt 类如 QSqlQueryModelQSqlTableModel 将为该字段生成 SQL。

另请参阅isGenerated(), setMetaType(), setRequiredStatus(), setLength(), setPrecision(), setDefaultValue(), 和 setReadOnly().

void QSqlField::setLength(int fieldLength)

将字段的长度设置为 fieldLength。对于字符串,这是该字符串可以 hold 的最大字符数;对于其他类型,含义会变化。

另请参阅length(), setMetaType(), setRequiredStatus(), setPrecision(), setDefaultValue(), setGenerated() 和 setReadOnly().

void QSqlField::setMetaType(QMetaType type)

将字段的变体类型设置为 type

另请参阅 metaType()、setRequiredStatus()、setLength()、setPrecision()、setDefaultValue()、setGenerated() 和 setReadOnly()。

void QSqlField::setName(const QString &name)

将字段的名称设置为 name

另请参阅 name()。

void QSqlField::setPrecision(int precision)

设置字段的 precision。这仅影响数值字段。

另请参阅 precision()、setMetaType()、setRequiredStatus()、setLength()、setDefaultValue()、setGenerated() 和 setReadOnly()。

void QSqlField::setReadOnly(bool readOnly)

将字段值的只读标志设置为 readOnly。只读字段无法使用 setValue() 设置其值,并且无法使用 clear() 清除到 NULL。

另请参阅 isReadOnly()。

void QSqlField::setRequired(bool required)

如果 required 为 true,则将此字段的必填状态设置为 必填;否则将其设置为 可选

另请参阅 setRequiredStatus() 和 requiredStatus()。

void QSqlField::setRequiredStatus(QSqlField::RequiredStatus required)

将此字段的必填状态设置为 required

另请参阅 requiredStatus()、setMetaType()、setLength()、setPrecision()、setDefaultValue()、setGenerated() 和 setReadOnly()。

void QSqlField::setTableName(const QString &table)

将字段的 tableName 设置为 table

另请参阅 tableName()。

void QSqlField::setValue(const QVariant &value)

将字段的值设置为 value。如果字段是只读的(《a href="qsqlfield.html#isReadOnly" translate="no">isReadOnly() 返回 true),则不执行任何操作。

如果 的数据类型与字段当前的数据类型不同,则尝试将其转换为正确类型。在赋值的情况下,这保留了字段的数据类型,例如将一个 QString 赋值为整数数据类型。

要设置值为 NULL,请使用 clear()。

另请参阅 value(),isReadOnly() 和 defaultValue()。

[自从 6.6 开始不为异常] void QSqlField::swap(QSqlField &other)

将此字段与 other 交换。此函数非常快且永远不会失败。

此功能是在 Qt 6.6 中引入的。

QString QSqlField::tableName() const

返回字段的 tableName。

注意:当使用 QPSQL 驱动程序时,由于 libpq 库的限制,来自通过 QSqlQuery::record() 对单向查询执行的结果集的 QSqlField 中的 tableName() 字段不会被填充。

另请参阅 setTableName()。

QVariant QSqlField::value() const

QVariant 形式返回字段值。

使用 isNull() 检查字段的值是否为 NULL。

另请参阅 setValue()。

bool QSqlField::operator!=(const QSqlField &other) const

如果字段不等于 other,则返回 true;否则返回 false。

QSqlField &QSqlField::operator=(const QSqlField &other)

将字段设置为等于 other

bool QSqlField::operator==(const QSqlField &other) const

如果字段等于 other,则返回 true;否则返回 false。

© 2024 Qt 公司有限公司。本文档中所包含的贡献的文档版权属于各自的拥有者。本文档是根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款提供的。Qt 和相应的标志是芬兰及全球的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。