qt sql 数据库 QSqlQueryModel QSqlField 用于操控sql数据库和视图中的字段,代表着数据库或视图中单列的特性,比如数据类型,列名称,也代表着一列所包含的能够改变或显示的值。QSqlField对象很少在应用程序代码中显式创建。 通常可以通过已经包含字段列表的QSqlRecords间接访问它们。

Qt SQL C++ Classes

QSqlDatabase:Represents a connection to a database,代表了一个连接的数据库
QSqlDriverCreator:Template class that provides a SQL driver factory for a specific driver type,
QSqlDriverCreatorBase:The base class for SQL driver factories
QSqlDriver:Abstract base class for accessing specific SQL databases
QSqlDriverPlugin:Abstract base for custom QSqlDriver plugins
QSqlError:SQL database error information,,,sql访问数据库时的错误信息
QSqlField:Manipulates the fields in SQL database tables and views
QSqlIndex:Functions to manipulate and describe database indexes
QSqlQuery:Means of executing and manipulating SQL statements,执行或维护sql语句
QSqlRecord:Encapsulates a database record,压缩封装了数据库的记录
QSqlResult:Abstract interface for accessing data from specific SQL databases,提供了访问sql获得数据的接口

该类提供了一种针对SQL结果集的只读数据模式,是用于执行SQL语句和遍历结果集的高级接口。它建立在QSqlQuery之上,能够为显示类如QTableView提供数据。例如:

    QSqlQueryModel *model = new QSqlQueryModel;

      model->setQuery("SELECT name, salary FROM employee");
      model->setHeaderData(0, Qt::Horizontal, tr("Name"));
      model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
      QTableView *view = new QTableView;
      view->setModel(model);

      view->show();

//上述代码,我们设置了对象model的检索,然后设置了显示表头字段。QSqlQueryModel 也能够用来编程访问数据库,而不需要显示。

      QSqlTableModel model;
      model.setTable("employee");
      model.select();
int salary = model.record(4).value("salary").toInt();
//上述代码获取sql结果集中第四条记录的salary单元的值。假如salary位于第2列,也可通过如下代码获取。
      int salary = model.data(model.index(4, 2)).toInt();

默认情况model为只读模式,为了让其可读写,可重写集成该类重写setData和flags函数。另一个选择是使用QSqlTableModel类,该类可对数据库的单个表格进行读写操作。querymodel例子演示了怎么通过QSqlQueryModel显示sql结果,用户怎么继承QSqlQuerModel来自定义数据内容,怎样创建一个基于QSqlQueryModel的可读写模式。在sql语句中,如果数据库不能返回查询中所选行的数量,则该模型将以增量方式获取行。更多信息参加fetchMore()。

重要函数:

1,int columnCount(),introwCount():获取当前列数或行数

2,fetchMore():从数据库获取更多行

3,headerData():返回指定行的表头数据

4,insertColumns():指定位置插入一定数目的列

5,lastError():返回最近一次的错误信息

6,query():返回当前检索

7,record():范围指定行的记录
QSqlRelationalDelegate:Delegate that is used to display and edit data from a QSqlRelationalTableModel.用于显示/编辑来自QSqlRelationalTableMode的数据的代理
QSqlRelation:Stores information about an SQL foreign key:
QSqlRelationalTableModel:Editable data model for a single database table, with foreign key support
QSqlTableModel:Editable data model for a single database table

 QSqlRecord

  • QSqlField

用于操控sql数据库和视图中的字段,代表着数据库或视图中单列的特性,比如数据类型,列名称,也代表着一列所包含的能够改变或显示的值。QSqlField对象很少在应用程序代码中显式创建。 通常可以通过已经包含字段列表的QSqlRecords间接访问它们。

重要函数:

  • defaultValue,setDefaultValue返回和设置字段的默认值

  • isAutoValue,如果值通过数据库自动生成,则返回true,如自动增加的主键值
  • setAutoValue,标记该字段是否为为自动生成的值。
  • isGenerated,setGenerated,返回或设置值的生成状态。设置生成状态。 如果gen为false,则不会为此字段生成SQL; 否则,Qt类(例如QSqlQueryModel和QSqlTableModel)将为此字段生成SQL。
  • length,setLength,返回或设置字段长度。设置字段长度时,对于字符串,这是字符串可以容纳的最大字符数。 对于其他类型,含义也有所不同。
  • name,setName,返回或设置字段名称
  • precision,setPrecision,设置或返回字段精度,只对数字类型有用。
  • isReadOnly,setReadOnly,判断是否为只读字段,设置为只读字段,对于只读字段,不能设置其值也不能清空其值。
  • setRequired,setRequiredStatus(),requiredStatus().,设置或范围字段是否必须的,有必须的(QSqlField::Required)和可选择(QSqlField::Optional)的两种状态。
  • setType,type,设置或返回当前字段的类型,即为QVariant的类型之一
  • value,setValue,设置或返回当前字段的值,设置为空值时,采用clear