当前位置: 首页 > news >正文

【BUG合集】(一)①数据库存1/0,请求结果返回true和false;②sql查数据库能查,但mybatis查为空;③data64图片存储为异常;

前言

最近,在工作上接手的任务中,各种 bug 问题出现,在解决的同时也可以记录一下。因此,觉得可以出个记录 bug 合集。方便后来者碰到类似情况,可以作为一个参考进行解决。

文章题目就包含当前文章内容中所遇到的三个 bug…

【BUG】

1.【数据库存1/0,请求结果返回true和false】

【问题】
在做一个业务查询数据功能的时候,一开始查询结果的还一直疑惑,java 代码里 isRead 完全没找到转换为 boolean 类型的啊,数据库里明明也是整数型呢!还以为是在哪块有转换的,我没有找到。但是后来,新增的时候出现了代码报错。

代码报错:Cannot deserialize instance of `java.lang.Integer` out of VALUE_TRUE token at... through reference chain: com.anpai.xxx.xxx["isRead"]

【分析、发现与解决】(点击展开)

【原因】
检查半天后,才发现是数据库的锅,数据库!isRead字段是 tinyint 类型,且存储长度为1,则转为 java.lang.Boolean,否则转为 java.lang.Integer。巧了不是,刚好这张表涉及的isRead字段对应的数据类型就是 tinyint 且长度大小为 1
在这里插入图片描述

【如何发现】
琢磨半天,小问了一下同事小马才知道 mysql 数据库还会有这个机制!怪自己孤陋寡闻了。这太关键了吧!

【如何修复】:
把该字段的长度设置2就好了~(如下图) 或者把 tinyint类型改为int类型,只要破坏数据类型tinyint 且长度大小为 1 这两个条件之一,防止转换即可。

【小结】:
勤学多问,不要只在逻辑层,底层、数据库也可能会存在问题。

2.【sql查数据库能查,但mybatis查为空】

【问题】
一个业务中的一个查询,数据属于的对应的操作人、操作人的同部门和低部门的数据都可以看到。写好的 sql 语句(如下)在数据库能执行能获取到对应的操作人、操作人的同部门和低部门的数据也可看,但是在 mybatis 框架的 xml 执行只能获取到对应的操作人,获取不到操作人的同部门和低部门的数据

select * from t_book as b where ((b.created_user_id = "#{userId}" and b.dept) or ( (SELECT GROUP_CONCAT(id SEPARATOR ',') as deptIds from t_dept where full_dept_id LIKE CONCAT('%',"#{deptId}",'%')) LIKE CONCAT('%',b.dept_id,'%')))

在这里插入图片描述

【分析、发现与解决】(点击展开)

【原因】
【未解决】: 一开始,以为代码中又有其他拦截器的权限拦截掉(执行的 sql 语句中加上部门 id 权限),但是 sql 语句已经一模一样在控制台中输出,但结果就是为空数据或不包含同级和下级的数据。

【个人揣测】: jdbc 框架不认可 or 后的 sql((集合)LIKE(数据),如下)

((SELECT GROUP_CONCAT(id SEPARATOR ',') as deptIds from t_dept where full_dept_id LIKE CONCAT('%',"#{deptId}",'%')) LIKE CONCAT('%',b.dept_id,'%')
)

【如何发现】
接口返回的数据不对的时候发现的。

【如何修复】
我把这奇怪的问题,问向了同事小马。小马也很疑惑,同时也疑惑我的 sql 语句,听取了一下他的建议,用 find_in_set() 的方法去查询。结果居然可以了!

or 后的 sql(如下)

(FIND_IN_SET(b.dept_id, (SELECT GROUP_CONCAT(id SEPARATOR ',') as deptIds from t_dept where full_dept_id LIKE CONCAT('%',"#{deptId}",'%'))
)

完整 sql(如下)

select * from t_book as b where ((b.created_user_id = "#{userId}" and b.dept) or ((SELECT GROUP_CONCAT(id SEPARATOR ',') as deptIds from t_dept where full_dept_id LIKE CONCAT('%',"#{deptId}",'%')) LIKE CONCAT('%',b.dept_id,'%'))
)

【小结】
不要弄太复杂的 sql,多使用和熟悉 sql 提供的方法~

3.【data64图片存储为异常】

【问题】
一个富文本功能需要存储图片,做法是前端把图片进行data64转换然后传到后端存储到数据库里。但是进行有图片的富文本存了后,前端再请求展示出来,却是裂开的图片,不存在的。

(图左新增;图右查询

image.png     image.png

【分析、发现与解决】(点击展开)

【原因】
存到数据库的数据data64+号全变成 “ ”(空格)了。

【如何发现】
在检查后端也已经使用URLDecoder.decode() 进行转义了。才发现在前端就没传入进去,用在线文本比对工具 | 菜鸟工具对比一下才发现。前端传的时候就已经出错了,后端再怎么转义(把+号转对应的编码%2B)肯定都无济于事了。(图解发现过程)

对比数据(发现+号变成“ ”空格)

image.png

查找在哪变成了空格,发现是在网络传输层。(前端传参没问题,但是到后端变成了空格)

image.png

【如何修复】
基于前端传参没问题,但是到后端变成了空格的原因,那么在后端再怎么进行转义都是没有处理到点的。因此是在前端进行处理转义才对!

  // base64网络传输+号会变空格,全部替换为编码(%2B)var formContent = this.formContent;form.txt = formContent.txt.replaceAll("+","%2B"); this.formContent = formContent;

【小结】
学习了网络传输层还会导致“+”变为“ ”(空格)。

总结

  1. 数据库的表里,字段为 tinyint 类型,且存储长度为1,会转为 java.lang.Boolean,否则转为 java.lang.Integer
  2. ① sql 查数据库能查,但 mybatis 查为空。LIKE 用法,JDBC 没有转移成功执行(集合)LIKE(数据)。(个人揣测)
    ② 不要弄太复杂的 sql,多使用和熟悉 sql 提供的方法。
  3. 网络传输层还会导致“+”号变为“ ”(空格),传输数据可以先把数据进行编码(如“+”号替换为对应的编码“%2B”)。

文章小尾巴

文章小尾巴(点击展开)

文章写作、模板、文章小尾巴可参考:《写作“小心思”》
  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
   我是南方者,一个热爱计算机更热爱祖国的南方人。
  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

相关文章:

【BUG合集】(一)①数据库存1/0,请求结果返回true和false;②sql查数据库能查,但mybatis查为空;③data64图片存储为异常;

前言 最近,在工作上接手的任务中,各种 bug 问题出现,在解决的同时也可以记录一下。因此,觉得可以出个记录 bug 合集。方便后来者碰到类似情况,可以作为一个参考进行解决。 文章题目就包含当前文章内容中所遇到的三个 b…...

python基础练习题库实验7

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目总结题目1 编写代码创建一个名为Staff的类和方法__init__,以按顺序初始化以下实例属性: -staff_number -first_name -last_name -email 代码 class Staff:def __init__(self, staff_number, first_name,…...

C语言你爱我么?(ZZULIOJ 1205:你爱我么?)

题目描述 LCY买个n束花准备送给她暗恋的女生,但是他不知道这个女生是否喜欢他。这时候一个算命先生告诉他让他查花瓣数,第一个花瓣表示"爱",第二个花瓣表示"不爱",第三个花瓣表示"爱"..... 为了使最…...

动手学深度学习(三)---Softmax回归

文章目录 一、理论知识1.图像分类数据集2.softmax回归的从零开始实现3.Softmax简洁实现 【相关总结】torch.sum()torch.argmax()isinstance():[python] softmax回归 一、理论知识 回归估计一个连续值分类预测一个离散类别 回归单连续数值输出自然区间R跟真实值的区别作为损失 …...

爬虫代理技术与构建本地代理池的实践

爬虫中代理的使用: 什么是代理 代理服务器 代理服务器的作用 就是用来转发请求和响应 在爬虫中为何需要使用代理? 隐藏真实IP地址:当进行爬取时,爬虫程序会发送大量的请求到目标网站。如果每个请求都使用相同的IP地址&#xff…...

token认证机制,基于JWT的Token认证机制实现,安全性的问题

文章目录 token认证机制几种常用的认证机制HTTP Basic AuthOAuthCookie AuthToken AuthToken Auth的优点 基于JWT的Token认证机制实现JWT的组成认证过程登录请求认证 对Token认证的五点认识JWT的JAVA实现 基于JWT的Token认证的安全问题确保验证过程的安全性如何防范XSS Attacks…...

什么是计算机病毒?

计算机病毒 1. 定义2. 计算机病毒的特点3. 计算机病毒的常见类型和攻击方式4. 如何防御计算机病毒 1. 定义 计算机病毒是计算机程序编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或程序代码。因其特点与生…...

【C++】哈希(位图、布隆过滤器)

一、哈希的应用(位图和布隆过滤器) 1、位图(bitset) (1)位图概念 【题目】 给 40亿 个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这 40亿 个数中。…...

LeetCode198.打家劫舍

打家劫舍和背包问题一样是一道非常经典的动态规划问题,只要做过几道动态规划的题,这道题简直就非常容易做出来。我应该花了10来分钟左右就写出来了,动态规划问题最重要的就是建立状态转移方程,就是说如何从上一个状态转移到下一个…...

Appium PO模式UI自动化测试框架——设计与实践

1. 目的 相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说,它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在即合理,自动化UI测试自然也是广…...

使用VUE3实现简单颜色盘,吸管组件,useEyeDropper和<input type=“color“ />的使用

1.使用vueuse中的useEyeDropper来实现滴管的功能和使用input中的type"color"属性来实现颜色盘 效果&#xff1a; 图标触发吸管 input触发颜色盘 组件代码部分 &#xff1a;<dropper> ---- vueuse使用 <template><div class"sRGBHexWrap fbc…...

matlab提取特征(医学图像)

乳腺肿瘤图片提取特征: %形态特征 %周长 面积 周长面积比 高度 宽度 纵横比 圆度 矩形度 伸长度 拟合椭圆长轴长 拟合椭圆短轴长 %拟合椭圆长轴与皮肤所夹锐角 最小外接凸多边形面积 最小外接凸多边形面积与肿瘤区面积比 %小叶树 叶指数 %纹理特征 %方差 熵 最小边差异 四个方…...

P4 C++ 条件与分支(if)

前言 今天我们来看看条件语句&#xff0c;换句话说&#xff0c;也就是 if 语句、if else 和 else if 等等这写语句。 我知道大家基本上已经非常了解 if 语句和所有 C 中的分支语句&#xff0c;但我还是鼓励你们继续看完这一讲&#xff0c;这里可能包含一些新东西。我们还会深入…...

django+drf+vue 简单系统搭建 (4) 用户权限

权限控制是web中的重要组成部分。与以往的博客系统不同&#xff0c;本次工具页面仅支持注册用户。 每个注册用户都能访问到工具页面&#xff0c;并且提交自己的task来选择具体的工具来处理自己提交的文件。每个注册用户都只能访问到自己提交的task&#xff0c;而管理员则可以查…...

stm32 计数模式

计数模式 但是对于通用定时器而言&#xff0c;计数器的计数模式不止向上计数这一种。上文基本定时器中计数器的计数模式都是向上计数的模式。 向上计数模式&#xff1a;计数器从0开始&#xff0c;向上自增&#xff0c;计到和自动重装寄存器的目标值相等时&#xff0c;计数器清…...

rss服务搭建记录

layout: post title: RSS subtitle: vps搭建RSS服务 date: 2023-11-27 author: Sprint#51264 header-img: img/post-bg-universe.jpg catalog: true tags: - 折腾 文章目录 引言RSShub-dockerRSS-radarFreshrssFluent reader获取fever api配置Fluent Reader同步 结语 引言 一个…...

GEE 23:基于GEE实现物种分布模型之随机森林法

基于GEE实现物种分布模型之随机森林法 1.物种分布数据2.研究区绘制3.预测因子选择 1.物种分布数据 根据研究目的和需要导入物种数据&#xff1a; // Load presence data var Data ee.FeatureCollection("users/************736/Distribution"); print(Original da…...

HCIE 01:基于前缀列表的BGP ORF功能

当运行BGP协议的某台设备上&#xff0c;针对入方向配置了基于ip-prefix的路由过滤&#xff0c;过滤了邻居发送的路由&#xff1b; 目前想&#xff0c;通过在peer关系的两端设备上都配置ORF功能&#xff0c;实现路由发送端只能送路由接收端过滤后的路由&#xff1b; ORF功能的说…...

基于SSM的云鑫曦科技办公自动化管理系统设计与实现

基于SSM的云鑫曦科技办公自动化管理系统设计与实现 摘 要: 随着时代的发展&#xff0c;单位办公方式逐渐从传统的线下纸张办公转向了使用个人pc的线上办公&#xff0c;办公效率低下的传统纸质化办公时代的淘汰&#xff0c;转型到信息化办公时代&#xff0c;面对当今数据逐渐膨…...

Angular项目中如何管理常量?

在Angular项目中&#xff0c;你可以使用不同的方式来管理常量。以下是一些常见的方法&#xff1a; 1、常量文件&#xff1a; 创建一个单独的 TypeScript 文件&#xff0c;其中包含你的常量。例如&#xff0c;创建一个名为 constants.ts 的文件&#xff0c;并在其中定义你的常量…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...

职坐标物联网全栈开发全流程解析

物联网全栈开发涵盖从物理设备到上层应用的完整技术链路&#xff0c;其核心流程可归纳为四大模块&#xff1a;感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性&#xff0c;例如传感器选型需平衡精度与…...

【HTML】HTML 与 CSS 基础教程

作为 Java 工程师&#xff0c;掌握 HTML 和 CSS 也是需要的&#xff0c;它能让你高效与前端团队协作、调试页面元素&#xff0c;甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML&#xff0c;网页骨架搭建 核心概念&#xff1a;HTML通过标签定义内…...