写了个数据查询为空的 Bug,你会怎么办?

news/2024/7/10 21:38:52 标签: bug, 程序员, 编程, 计算机, 互联网, IT, 学习

大家在开发时,遇到的一个典型的 Bug 就是:为什么数据查询为空?

对应的现象就是:前端展示不出数据、或者后端查询到的数据列表为空。

遇到此类问题,其实是有经典的解决套路的,下面鱼皮给大家分享如何高效解决这个问题。

只需 4 个步骤:

解决步骤

1、定位问题边界

首先要定位数据查询为空的错误边界。说简单一点,就是要确认是前端还是后端的锅。

要先从请求的源头排查,也就是前端浏览器,毕竟前端和后端是通过接口(请求)交互的。

在浏览器中按 F12 打开浏览器控制台,进入网络标签,然后刷新页面或重新触发请求,就能看到请求的信息了。

选中请求并点击预览,就能看到后端返回结果,有没有返回数据一看便知。

如果发现后端正常返回了数据,那就是前端的问题,查看自己的页面代码来排查为什么数据没在前端显示,比如是不是取错了数据的结构?可以多用 debugger 或 console.log 等方式输出信息,便于调试。

星球同学可以免费阅读前端嘉宾神光的《前端调试通关秘籍》:https://t.zsxq.com/13Rh4xxNK

如果发现后端未返回数据,那么前端需要先确认下自己传递的参数是否正确。

比如下面的例子,分页参数传的太大了,导致查不到数据:

如果发现请求参数传递的没有问题,那么就需要后端同学帮忙解决了。

通过这种方式,直接就定位清楚了问题的边界,高效~

2、后端验证请求

接下来的排查就是在后端处理了,首先开启 Debug 模式,从接受请求参数开始逐行分析。

比如先查看请求参数对象,确认前端有没有按照要求传递请求参数:

毕竟谁能保证我们的同事(或者我们自己)不是小迷糊呢?即使前端说自己请求是正确的,但也必须要优先验证,而不是一上来就去分析数据库和后端程序逻辑的问题。

验证请求参数对象没问题后,接着逐行 Debug,直到要执行数据库查询。

3、后端验证数据库查询

无论是从 MySQL、MongoDB、Redis,还是文件中查询数据,为了理解方便,我们暂且统称为数据库。

上一步中,我们已经 Debug 到了数据库查询,需要重点关注 2 个点:

1)查看封装的请求参数是否正确

对于 MyBatis Plus 框架来说,就是查看 QueryWrapper 内的属性是否正确填充了查询条件

2)查看数据库的返回结果是否有值

比如 MyBatis Plus 的分页查询中,如果 records 属性的 size 大于 0,表示数据库返回了数据,那么就不用再排查数据库查询的问题了;而如果 size = 0,就要分析为什么从数据库中查询的数据为空。

这一步尤为关键,我们需要获取到实际发送给数据库查询的 SQL 语句。如果你使用的是 MyBatis Plus 框架,可以直接在 application.yml 配置文件中开启 SQL 语句日志打印,参考配置如下:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

然后执行查询,就能看到完整的 SQL 语句了:

把这个 SQL 语句复制到数据库控制台执行,验证下数据结果是否正确。如果数据库直接执行语句都查不出数据,那就确认是查询条件错误了还是数据库本身就缺失数据。

4、后端验证数据处理逻辑

如果数据库查询出了结果,但最终响应给前端的数据为空,那么就需要在数据库查询语句后继续逐行 Debug,验证是否有过滤数据的逻辑。

比较典型的错误场景是查询出的结果设置到了错误的字段中、或者由于权限问题被过滤和脱敏掉了。

最后

以后再遇到数据查询为空的情况,按照以上步骤排查问题即可。排查所有 Bug 的核心流程都是一样的,先搜集信息、再定位问题、最后再分析解决。


http://www.niftyadmin.cn/n/5221813.html

相关文章

C++之STL库:string类(用法列举和总结)

前言 大家在学习STL库的时候一定要学会看英文文档&#xff0c;俗话说熟能生巧&#xff0c;所以还得多练&#xff01;在使用string类之前&#xff0c;要包含头文件#include <string>和using namespace std; 文档链接&#xff1a;string - C Reference 一、string——构造…

aspera传输方案怎么样,需要选择aspera替代方案吗

Aspera传输方案是一种高速、可靠的文件传输解决方案&#xff0c;适用于需要大规模传输大文件或数据集的企业和组织。Aspera采用UDP协议及自己开发的FASP协议进行加速传输&#xff0c;能够在高延迟、高丢包网络环境下实现稳定快速的传输。 Aspera传输方案具有以下优点&#xff1…

leetcode刷题详解十

188. 买卖股票的最佳时机 IV&#xff08;最多买卖k次&#xff09; 注意事项 这道题和最多买卖两次是一模一样的思路就是把2换成k了但是还是有几个地方需要注意的 给的整数数组可能为0k其实没有很大&#xff0c;可以想一下&#xff0c;最多为n/2(n是数组的长度) int maxProfit…

Linux学习笔记6-串口应用

到现在为止都是在开发板上运行的裸机程序&#xff0c;相当于之前学习STM32单片机时走过的路&#xff0c;还没有真正进入到核心的驱动开发部分&#xff0c;但这都是基础&#xff0c;所以慢慢来不着急。 接下来进入串口通信的学习&#xff0c;和GPIO一样&#xff0c;也是和单片机…

[多线程】线程安全问题

目录 1.举个栗子 2.线程安全的概念 3.线程不安全的原因 3.1原子性 3.2Java内存模型&#xff08;jvm&#xff09; 3.3代码重排序 4.解决线程的不安全问题-&#xff08;synchronized&#xff09; ​编辑 4.1sychronized的特性 4.2刷新内存 4.3可重入 5.synchornized使…

Oracle整体架构

4. Oracle整体架构 所谓整体架构,这里是指保证Oracle数据库系统正常工作和运行所必须的组件及其实现。从大的方面讲,这主要包括实例和数据库。在此基础上细分,实例由相关内存区域和服务进程组成,数据库包括各种相关文件,而这些相关内存区域、服务进程及相关文件又可再进一…

C# 实现微信退款及对帐

目录 需求 基础准备 关键代码 操作界面 ​编辑 退款订单类及方法 退款功能实现 对帐 支付商家后台相关要点 实时交易帐单查询 精确交易帐单查询 小结 需求 在招聘报名系统里&#xff0c;考务费支付是其中一个环节&#xff0c;支付方式很多种&#xff0c;比如银联、…

解锁Jira本地部署的数据中心版高级功能,打造高效、智能、精细化的项目管理

近日&#xff0c;在龙智携手Atlassian与JFrog共同举办的“大规模开发创新&#xff1a;如何提升企业级开发效率与质量”的线下研讨会中&#xff0c;龙智高级咨询顾问、Atlassian认证专家叶燕秀为大家带来了精彩演讲&#xff0c;解锁Jira Data Center版的诸多高级功能&#xff0c…