热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

UI层—数据库表显示方案

一、思路本文为mvc解决思路,即模型、视图、控制,在qt中,视图与控制将结为一体封装于View中,如QTableView&

一、思路

本文为mvc解决思路,即模型、视图、控制,在qt中,视图与控制将结为一体封装于View中,如QTableView,即我们后文中说的UI。
数据库属于持久化的数据模型,而UI属于程序中的图形对象,用于显示内存中的对象数据。
想要实现数据库数据在UI中显示,我们需要将持久化的数据模型(数据库数据)转为程序中的对象模型(下文简称数据模型),如下图所示:
在这里插入图片描述
从数据库到数据模型的转换有很多种,比如sql语句的增、删、查、改,就是将数据库的数据读取到程序对象中,然后再用UI显示对象的数据,这个对象就是我们统称的数据模型,比如qt的QSqlTableModel、QSqlQueryModel。

在实际复杂的工程中,数据库到数据模型的转换我们都是使用ORM库处理,而不是苦逼去手写SQL,下面是一种ORM库——QxOrm使用教程:
一文学会QxOrm: https://blog.csdn.net/weixin_42887343/article/details/120664818

二、方案

因为带图像界面的软件开发,我是接触最多的库就是qt了,所以本文将以qt的软件开发为例,从数据模型角度出发进行了一下总结,大概有如下三种方案(名称按理解定义的):

  1. 直接显示方案
  2. 使用qt原生的数据模型
  3. 自定义数据模型

2.1 直接显示方案

这种方法比较直接,就是将数据库数据按条件读取上来,然后直接将读取上来的数据显示到QtableWidget表格的单元格中(QtableView不能直接设置单元格数据)。示意图如下:
在这里插入图片描述
这种方法比较简单粗暴,缺点也比较明显!
因为没有数据模型,或者说数据模型非常简单,就是一个临时变量,所以无法缓存跟多数据,这样就导致UI端想切换显示数据的时候,需要不断读取数据库数据。
优点就是实现简单,工作量也是最少,比较适合翻页表格的界面(每翻一页就查询一次,且查询的数据条数固定,然后覆盖表格中原来的数据)。

2.2 使用qt原生的数据模型

这种方法就是使用qt的QSqlTableModel或者QSqlQueryModel作为数据模型对象,这样我们不需要考虑到数据库和数据模型之间的转换,把更多的精力花在UI界面上,或者UI与数据模型的交互上。
在这里插入图片描述
在实际的开发中,如果没有特殊的需求的话,这种方案使用的还是比较多的,下面给出一个使用的示例代码。

  1. 数据库QSqlDatabase的设定与连接。
  2. 数据模型QSqlTableModel 的实例化及设置。(设置数据库和对应的表)
  3. 将数据模型传入QTableView或QTableWidget。(QTableWidget继承于QTableView)

代码如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //定义全局的,此处只是举例db.setDatabaseName("./Users.db");... //数据库连接的其他操作QSqlTableModel *myTableModel; //定义全局的,此处只是举例myTableModel = new QSqlTableModel(this,&db); //绑定数据库myTableModel->setTable("User"); //设置数据库表ui->tableView->setModel(myTableModel); //给QtableWidget设置数据模型

2.3 自定义数据模型

在这里插入图片描述

分析对比

三种方式的优缺点。

总结

针对嵌入式的方案。
针对PC的方案。


推荐阅读
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
author-avatar
徐崇杰嚼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有