Qt 之 QSqlField Class

32 篇文章 1 订阅
31 篇文章 2 订阅

详细描述

QSqlField 类在SQL数据库表和视图中操作字段。
QSqlField 表示数据库中单个列的特征,例如数据类型和列名(字段名)。字段还包括数据库列的值可以查看或者修改它。

字段的数据值存储为QVariants。使用不兼容的类型是不允许的。例如:
      QSqlField field("age", QVariant::Int);
      field.setValue(QPixmap());  // WRONG

然而,该字段将尝试将某些数据类型转换为可能的字段数据类型,例如可将字符串“123”尝试转换成整形的数值123:
      QSqlField field("age", QVariant::Int);
      field.setValue(QString("123"));  // casts QString to int

在应用程序代码中很少显示地创建QSqlField对象。它们通常通过已经包含字段列表的QSqlRecords间接访问。举个例子:
      QSqlQuery query;
      ...
      QSqlRecord record = query.record();
      QSqlField field = record.field("country");

QSqlField对象可以提供一些关于该字段的一些元数据,例如,字段的名字 name(), variant(变体)类型type(),字段长度length(),精度precision(), 默认值  defaultValue(), 类型ID  typeID(), 需要与否状态 requiredStatus(), 是否生成 isGenerated() 和是否只读 isReadOnly(). 字段数据可以通过 isNull()检查是否为空, 通过  value()取回 QVariant 类型的数据。可以通过 setValue()编辑数据或者通过 clear()清空数据。

相关成员

枚举常量 描述
QSqlField::Required 0 插入记录时必须指定字段
QSqlField::Optional 1 插入记录时不需要指定字段
QSqlField::Unknown 2 数据库驱动不能确定字段时必须的还是可选的

相关API

QSqlField::QSqlField(const QString &fieldName = QString(), QVariant::Type type = QVariant::Invalid)
构造一个variant类型为type字段名叫f ieldName 的空字段。

QSqlField::QSqlField(const QSqlField &other)
构造一个other的副本。

QSqlField::~QSqlField()
销毁对象并释放任何已经分配的资源。

void QSqlField::clear()
清除字段的值并将其设置为NULL。如果字段时只读的,那么什么也没有发生。

QVariant QSqlField::defaultValue() const
返回字段的默认值(可能为空(NULL))。

bool QSqlField::isAutoValue() const
如果值是由数据库自动生成的返回true,例如,自增的主键值。
注意:当使用ODBC驱动,由于ODBC API的限制,isAutoValue()字段只有在执行SELECT查询时获得的QSqlRecord生成的 QSqlField 字段中填充。从 QSqlDatabase::record() 或者 QSqlDatabase::primaryIndex().获得的QSqlRecord生成的QSqlField字段 isAutoValue()返回false.

bool QSqlField::isGenerated() const
如果字段生成返回true;否则返回false.

bool QSqlField::isNull() const
如果字段的值为空(NULL)返回true,否则返回false.

bool QSqlField::isReadOnly() const
如果该字段的值是只读的返回true,否则返回false.

bool QSqlField::isValid() const
如果字段的variant(QVariant)类型有效返回true;否则返回false。

int QSqlField::length() const
返回字段的长度。如果返回值是负数,意味着信息无法从数据库获得。

QString QSqlField::name() const
返回字段的名字。

int QSqlField::precision() const
返回该字段的精度;这只对数值类型有意义。
如果返回负数,意味着信息无法从数据库获得。

RequiredStatus QSqlField::requiredStatus() const
返回该字段的RequiredStatus(前面提到)枚举。若所需的字段没有值该INSERT操作将会失败。

void QSqlField::setAutoValue(bool autoVal)
如果autoVal为true,则将该字段标记为自动生成的值。

void QSqlField::setDefaultValue(const QVariant &value)
设置value为此字段的默认值。

void QSqlField::setGenerated(bool gen)
设置生成状态。如果gen为false,则不会为该字段生成SQL;否则,QSqlQueryModel 和QSqlTableModel等Qt类将为这个字段生成SQL。

void QSqlField::setLength(int fieldLength)
将该字段的长度设置为fieldLength.对于字符串指的是该字符串所能容纳的最大字符数;该含义因类型不同而不同。

void QSqlField::setName(const QString &name)
将字段的名称设置为name.

void QSqlField::setPrecision(int precision)
设置字段的精度为precision。这只对数值字段有影响。

void QSqlField::setReadOnly(bool readOnly)
将字段的只读标志设置为readOnly。一个只读的字段不能通过setValue()设置它的值也不能通过clear()去清空它的值。

void QSqlField::setRequired(bool required)
如果required为true则设置该字段的required状态(插入数据时是否需要指定该字段)为QSqlField::Required(QSqlField::RequiredStatus枚举常量的一个枚举值);否则,设置为QSqlField::Optional。

void QSqlField::setRequiredStatus(RequiredStatus required)
设置该字段的required状态(插入数据时是否需要指定该字段)为required。

void QSqlField::setType(QVariant::Type type)
设置该字段的variant类型为type.

void QSqlField::setValue(const QVariant &value)
设置该字段的值为value。如果该字段为只读(isReadOnly()返回true),什么都不会发生。
如果value的数据类型和该字段当前的数据类型不同,将会尝试将其转换为合适的类型。这保留了在赋值情况下字段的数据类型。
例如:一个QString类型到一个整形数据类型。
使用clear()可设置值为空NULL;

QVariant::Type QSqlField::type() const
返回存储在数据库中的字段类型。注意实际的值可能是不同的类型,数值太大不能存储在长整型或者double中通常存储为字符串以防止精度丢失。

QVariant QSqlField::value() const
将字段的值以 QVariant 返回。
使用isNull检验该字段的值是否为空(NULL).

bool QSqlField::operator!=(const QSqlField &other) const
如果该字段和other字段不相等返回true,否则返回false。

QSqlField &QSqlField::operator=(const QSqlField &other)
将该字段的值设为other(将other赋值给该字段)。

bool QSqlField::operator==(const QSqlField &other) const
如果该字段和other字段相等返回true,否则返回false。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值