热门标签 | 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的方案。


推荐阅读
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 深入理解ASP.NET MVC中的_ViewStart.cshtml
    本文介绍了_ViewStart.cshtml文件在ASP.NET MVC 3.0及以上版本中的作用和使用方法。该文件位于Views目录下,主要用于统一配置视图布局和其他全局设置。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 本文详细介绍了MySQL数据库中的Bin Log和Redo Log,阐述了它们在日志记录机制、应用场景以及数据恢复方面的区别。通过对比分析,帮助读者更好地理解这两种日志文件的作用和特性。 ... [详细]
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社区 版权所有