文章目录

  • Qt数据库操作(三) -- 使用SQL模型类
    • 1、SQL查询模型
    • 2、SQL表格模型
    • 3、关系表格模型

Qt数据库操作(三) – 使用SQL模型类

Qt 提供了3个高级的类来访问数据库,分别是QSqlQueryModel、QSqlTable和QSqlRelationalTableModel。

此三类都继承自QAbstractableModel 派生来的。

使用这些类的好处是很容易地适应其他数据源。

1、SQL查询模型

QSqlQueryModel 提供了一个基于SQL查询的只读模型。

QSqlQueryModel *model = new QSqlQueryModel(this);model->setQuery("select * from student");
model->setHeaderData(0, Qt::Horizontal, tr("学号"));
model->setHeaderData(1, Qt::Horizontal, tr("姓名"));
model->setHeaderData(2, Qt::Horizontal, tr("课程"));
QTableView *view = new QTableView(this);
view->setModel(model);

这里首先创建了QSqlQueryModel 对象,然后使用setQuery()来执行SQL语句进行查询整张student表。使用setHeaderData()来设置显示的表头。

然后创建视图,将QSqlModel对象作为其要显示的模型。

QSqlQueryModel中的其他操作:

colunmnCount() 返回一条记录中字段的个数;

rowCount()返回结果集中记录的条数;

record() 返回第n条记录;

index()返回指定记录指定字段的索引;

clear()可以清空模型中的结果集。

query()获取QSqlQuery对象。

2、SQL表格模型

QSqlTableModel提供了一个一次只能操作一个SQL 表的读、写模型。

它是QSqlQuery的更高层次的替代品,可以浏览和修改独立的SQL表。

如果想让其成为只读模型,那么可以从视图进行设置,例如

view->setEditTrigers(QAbstractItemView::NoEditTriggers);

代码示例:

   model = new QSqlTableModel(this);model->setTable("student");     //指定数据表model->select();         //查询等价于“select * from student”// 设置编辑策略model->setEditStrategy(QSqlTableModel::OnManualSubmit);   // 设置表格模型的编辑策略ui->tableView->setModel(model);

// 提交修改按钮
void MainWindow::on_pushButton_clicked()
{// 开始事务操作model->database().transaction();if (model->submitAll()) {model->database().commit(); //提交} else {model->database().rollback(); //回滚QMessageBox::warning(this, tr("tableModel"),tr("数据库错误: %1").arg(model->lastError().text()));}
}// 撤销修改按钮
void MainWindow::on_pushButton_2_clicked()
{model->revertAll(); //将模型中的修改进行恢复
}// 查询按钮,进行筛选
void MainWindow::on_pushButton_7_clicked()
{QString name = ui->lineEdit->text();//根据姓名进行筛选,一定要使用单引号model->setFilter(QString("name = '%1'").arg(name));model->select();
}// 显示全表按钮
void MainWindow::on_pushButton_8_clicked()
{model->setTable("student");model->select();
}// 按id升序排列按钮
void MainWindow::on_pushButton_5_clicked()
{//id属性,即第0列,升序排列model->setSort(0, Qt::AscendingOrder);model->select();
}// 按id降序排列按钮
void MainWindow::on_pushButton_6_clicked()
{model->setSort(0, Qt::DescendingOrder);model->select();
}// 删除选中行按钮
void MainWindow::on_pushButton_4_clicked()
{// 获取选中的行int curRow = ui->tableView->currentIndex().row();// 删除该行model->removeRow(curRow);int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"),QMessageBox::Yes, QMessageBox::No);if(ok == QMessageBox::No){ // 如果不删除,则撤销model->revertAll();} else { // 否则提交,在数据库中删除该行model->submitAll();}
}// 添加记录按钮
void MainWindow::on_pushButton_3_clicked()
{// 获得表的行数int rowNum = model->rowCount();int id = 10;// 添加一行model->insertRow(rowNum);model->setData(model->index(rowNum,0), id);// 可以直接提交//model->submitAll();
}

3、关系表格模型

QSqlRelationTableModel继承自QSqlTableModel,且对其进行了扩展,提供了对外键的支持。

QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this);

model->setTable("student");
model->setRelation(2, QSqlRelation("course", "id", "name"));//在两表之间创建一个关系,参数“2“表示student表中的编号为2的列,即第三个字段course是一个外键,它映射到了course 表中的id字段
model->select();
QTableView *view = new QTableView(this);
view->setModel(model);view->setItemDelegate(new QSqlRelationalDelegate(view));  //  设置委托

}

总结:

  • 可以根据实际的需要选择哪个模型。如果熟悉SQL语法,又不需要将所有的数据都显示出来,只需要使用QSqlQuery就可以了。

  • QSqlTableModel,主要是用来显示一个单独的表格的。

  • QSqlQueryModel,可以显示任意一个结果集。

  • 关于 数据库部分的应用,可以参考SQL分类下的几个示例程序。

本文档整理自《QtCreator快速入门》

Qt数据库操作(三) -- 使用SQL模型类相关推荐

  1. QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型

    QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序 常用函数 QVariant headerDa ...

  2. Qt数据库(三)利用QSqlQuery类执行SQL语句(一)

    本文章原创于www.yafeilinux.com 转载请注明出处. SQL即结构化查询语言,是关系数据库的标准语言.前面已经提到,在Qt中利用QSqlQuery类实现了执行SQL语句.需要说明,我们这 ...

  3. [Qt教程] 第23篇 数据库(三)利用QSqlQuery类执行SQL语句

    [Qt教程] 第23篇 数据库(三)利用QSqlQuery类执行SQL语句 楼主  发表于 2013-5-15 22:39:29 | 查看: 813| 回复: 0 利用QSqlQuery类执行SQL语 ...

  4. 【Qt入门第23篇】 数据库(三)利用QSqlQuery类执行SQL语句

    导语 SQL即结构化查询语言,是关系数据库的标准语言.前面两节中已经在Qt里利用QSqlQuery类执行了SQL语句,这一节我们将详细讲解该类的使用.需要说明,因为我们重在讲解Qt中的数据库使用,而非 ...

  5. 详细的Qt数据库操作

    #include QT += sql QSqlDatabase类实现了数据库连接的操作 QSqlQuery类用来执行SQL语句 QSqlRecord类 封装数据库所有记录 第一:QSqlDatabas ...

  6. qt 数据库操作总结

    整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 转载于:https://www.cnblogs.com/lsgxeva/p/7852102.html 首先,要查 ...

  7. Qt 数据库操作(一)

    Qt 中的数据库操作比较简单,因为Qt提供了不需要SQL知识就可以浏览和编辑数据库的接口. Qt中的Qtsql模块提供了对数据库的支持,该模块中的众多类基本可以分为3层: 用户接口层: QSqlQue ...

  8. ThinkPHP 数据库操作之数据表模型和基础模型 ( Model )

    一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: public function te ...

  9. larval 操作mysql数据库_laravel的数据库操作(三种)

    laravel中提供了DB facade(原始查找).查询构造器和 Eloquent ORM三种操作数据库方式 1.新建数据表与连接数据库 1.1 新建数据表 学生表 CREATE TABLE IF ...

最新文章

  1. MySQL的安装配置(win7 64-bit)
  2. python Counter类
  3. (0001) iOS 开发之收集第三方资源篇
  4. Android进阶笔记:AIDL内部实现详解 (二)
  5. C++对C的加强之三目运算符功能增强
  6. STL常用容器大致对比
  7. oracle账号密码修改后特别容易锁定_Oracle密码过期如何取消密码180天限制及过期,账号锁住的问题...
  8. android_x86安装时遇到的问题与修改开机分辨率
  9. node生成uuid
  10. python编写科学计算器_Python实现的科学计算器功能示例
  11. 社交网路Reddit前高管推出新网站挑战前东家
  12. 2020五一建模:C题 饲料混合加工问题 题解
  13. 本周小折腾记录: ipad和电脑完成同屏功能
  14. 计算机内存的存储单位换算,电脑内存换算(电脑内存单位及换算)
  15. 黄金票据的制作与使用
  16. 植物大全和植物识别系统毕业设计,植物大全和AI识别系统设计与实现,植物识别系统系统论文毕设作品参考
  17. 【SAP】ABAP——币种金额转换
  18. 计算机通电后自动断电,电脑开机自动断电,详细教您电脑开机自动断电怎么解决...
  19. Halcon算子解释大全
  20. 全球电容生产厂商排名一览表

热门文章

  1. Linux系统\Centos没有网卡eth0配置文件怎么办?
  2. CBLAS的安装与使用
  3. IEEE conference 中出现的PDF字体嵌入的问题
  4. 这 28 张精炼图,将吴恩达的 deeplearning.ai 总结得恰到好处!
  5. 台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error
  6. adf检验代码 python_第22期:向量自回归(VAR)模型预测——Python实现
  7. python怎样导入excel数据_python导入excel数据
  8. 预编译头文件来自编译器的早期版本_Debug
  9. 常用WebService一览表
  10. [转]COM线程模型-套间