数据库【QSqlQueryaModel】

QSqlQueryModel Class

描述

QSqlQueryModel是用于执行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();

我们设置了模型的查询,然后设置了显示在视图标题中的标签。
QSqlQueryModel也可以用于以编程方式访问数据库,而无需将其绑定到视图:

 	QSqlQueryModel model;
    model.setQuery("SELECT name, salary FROM employee");
    int salary = model.record(4).value("salary").toInt();

上面的代码片段从SELECT查询的结果集中的记录4中提取了salary字段。由于工资是第二列(或列索引1),我们可以将最后一行重写如下:

 int salary = model.data(model.index(4, 1)).toInt();

默认情况下,该模型是只读的。要使其读写,必须对其进行子类化并重新实现setData()和flags()。另一种选择是使用QSqlTableModel,它提供了一个基于单个数据库表的读写模型。
querymodel示例说明了如何使用QSqlQueryModel来显示查询的结果。它还展示了如何在向用户显示数据之前对QSqlQueryModel进行子类化以自定义数据的内容,以及如何基于QSqlQueryModel创建读写模型。
如果数据库没有返回查询中所选行的数量,则模型将递增地获取行。

成员函数文档
bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex())
//如果有更多数据可供父级使用,则返回true;否则返回false。
//默认实现总是返回false。
void QSqlQueryModel::clear()
//清除模型并释放任何获取的资源。

int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex())
//返回指定的列数
QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole)
//返回指定项和角色的值。
//若项目超出界限或发生错误,则返回无效的QVariant。
void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())
//从数据库中获取更多行。
QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) 
//返回具有指定方向的标头部分中给定角色的标头数据。
QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) 
//返回模型中给定项的数据库结果集中值的索引。
//如果没有插入、删除或移动任何列或行,则返回值与项相同。
//如果项越界或项未指向结果集中的值,则返回无效的模型索引。
bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
//将计数列插入模型的位置列。父参数必须始终是无效的QModelIndex,因为该模型不支持父子关系。
QSqlError QSqlQueryModel::lastError() 
//返回有关数据库上发生的最后一个错误的信息。
QSqlQuery QSqlQueryModel::query()
void QSqlQueryModel::queryChange()
QSqlRecord QSqlQueryModel::record(int row)
//返回包含有关当前查询的字段信息的记录。如果行是有效行的索引,则该记录将填充该行的值。
//如果模型未初始化,将返回一条空记录。
QSqlRecord QSqlQueryModel::record() 
//返回一个空记录,该记录包含有关当前查询的字段的信息。
bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
//从位置列开始从模型中删除计数列。如果列已删除,则返回true;否则返回false。
QHash<int, QByteArray> QSqlQueryModel::roleNames() 
//返回模型的role名称。
int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex())
//如果数据库支持返回查询的大小(请参见QSqlDriver::hasFeature()),则返回当前查询的行数。否则,返回当前缓存在客户端上的行数。
bool QSqlQueryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
//将指定角色的水平标题的标题设置为值。如果模型用于在视图(例如,QTableView)中显示数据,则此选项非常有用。
//如果方向为Qt::Horizontal并且节引用了有效的节,则返回true;否则返回false。
//请注意,此函数不能用于修改数据库中的值,因为模型是只读的。
void QSqlQueryModel::setLastError(const QSqlError &error)
//受保护的函数,它允许派生类将数据库上发生的最后一个错误的值设置为error。
void QSqlQueryModel::setQuery(const QSqlQuery &query)
//重置模型并将数据提供程序设置为给定的查询。
void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())
//对给定的数据库连接数据库执行查询查询。如果未指定数据库(或无效数据库),则使用默认连接。

Example:

	QSqlQueryModel model;
	model.setQuery("select * from MyTable");
	if (model.lastError().isValid())
	    qDebug() << model.lastError();
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值