• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

做程序时,如果某个查询方法应当返回一条记录,但是查出来多条,是抛异常好还是从多条中取第一条好?

十万个为什么 空空 2024-3-24 16:24:35 8次浏览

关于问题做程序时,如果某个查询方法应当返回一条记录,但是查出来多条,是抛异常好还是从多条中取第一条好?一共有 5 位热心网友为你解答:

【1】、来自网友【智美童程青少儿编程】的最佳回答:

这种问题在程序开发中经常遇到,通常在多表合并查询时更是常见,如果遇到这样的情况,首先应该确定数据重复的原因,如果是个别无关紧要的数据造成了和重复,应该在合并查询时去字段,也就是说在 SQL 查询时,不要用 * ,而要明确查询的字段,如果去重复后仍然有重复记录,可以用 unqiue 或 distinct 去重,如果这样还是有多条记录,建议抛出常异常,不建议取重复数据的第一条,这样会造成数据混乱,使数据计算出现不可预料的错误。

数据的唯一性,一致性,正确性是程序开发中最最重要的问题,甚至必要时是可以牺牲掉性能的,另外数据的传输、计算过程都是需要留痕的,也就是说任何数据的产生、改变、消失都应该有迹可循,这不仅是一个健壮的、可靠的系统的所必备的,也系统后期拓展、升级、排错所要依赖的。

因此有效的、正确的处理数据是非常非常必要的!

【2】、来自网友【一一哥 Sun】的最佳回答:

本人 10 年开发培训经验,期间经历了 Java Web,Android,H5,大数据,PHP 等多个不同的方向的开发,也做过软件培训公司的金牌讲师,很有兴趣回答你这个问题。

你这个问题已经把需求说明的很清楚了,”某个查询方法应当返回一条记录,但是查出来多条“!也就是说,你的这个查询只应该有一个结果,但是在此时或者某些时候有了多个结果,那么就说明你的这个业务接口可能不符合幂等性要求啊。根据幂等性设计原则,无论你怎么查,只要参数一样,返回结果应该一样。

那么对于这种问题该怎么解决,抛出异常?返回多条中的第一条?

我觉得都不是很完美的解决方案。

抛异常

,这是有些人的一种解决方式,但是问题解决了吗?没有啊!问题还在那里,下次触发了这个条件,还是会抛异常。这就好比说,森林里有只虎,有一天吃了人,然后你不去解决老虎,只是在森林里挂了个牌子说:慎入,里面有虎!这……

然后返回多个结果中的第一条,

其实这也不是一种好办法,可能本就应该只返回一条,为什么查询到了多个呢?你数据库里数据的唯一性做了校验了吗?不说别的,每次都查询多个结果然后拿第一条数据,你不觉得这很影响效率吗?

所以要从根源上解决问题!为什么会导致数据有多条?该人工排查数据就人工排查,该加锁就加锁,尽可能保证查询时入参一样,结果也一样!

我从事互联网开发 10 年,主要的研究方向集中在 Java web 微服务架构领域,Android 移动端研发,HTML5 前端方向,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信你一定会有所收获。

如果有 Java,Android,H5 等开发方面的问题,或者是开发求职方面的问题,都可以在评论区留言,或者私信我。

【3】、来自网友【评谈科技事】的最佳回答:

如果某个查询方法应当返回一条记录而查出来多条,那么你第一件要做的事情就是抛出异常,其次要考虑是不是有 bug 存在于你的软件系统中。

抛出异常

抛出异常是为了保护程序,保护用户,保护公司。

假设你是一个登录系统,需要通过查询用户名来让用户进行登录操作,但是查询方法却查出了两个用户,这个时候你不可能随便选一个用户登录。

假设你是一个银行系统,有一个用户 A 来取钱,银行系统需要通过银行卡号来获取用户 A 的余额信息。当用户 A 插入银行卡后,银行系统开始查询用户信息,但是查询方法却返回了两个用户信息,这个时候你不可能随便选一个用户。

假设你是一个快递系统,需要通过单号来查询派送地址信息,但是当你调用查询方法一个单号却出现两个收货地址,这个时候你不可能随便选一个地址让快递小哥去派送。

考虑 bug

当程序执行的结果和你的预期不相同时,你就需要考虑是不是出现了 bug。

这个 bug 可能出现在与你系统任何的角落,此时你需要做的事情就是去一步步调试去定位 bug,然后去解决它。

比如说上面的快递系统,你要考虑为什么一个订单出现了两个收货地址,是因为存入数据库时出了差错还是读取数据库时出了差错或者是其他什么可能的原因,总之你要不断地去设想和验证才能快速的解决 bug。

结论

综上,当一个方法应当返回一条数据但实际却返回多条时,我的答案就是果断抛出异常保护系统保护用户保护公司。

【4】、来自网友【夶白兎】的最佳回答:

根据你的描述,返回多条数据已经属于“意外”,符合异常的使用标准,异常不会使代码变得“难看”,相反会使程序更加“健壮”。

【5】、来自网友【日冲信息 黄】的最佳回答:

这个必须抛异常!按正常逻辑不该出现重复的数据,出现了重复,要么程序处理中有 BUG,要么数据库损坏了。如果是前者,有可能是内存泄露,假如对安全性要求高的话,应立即关闭系统以防出现数据泄露的严重后果。如果是后者就更糟糕了,这等于损坏了用户财产,为了防止损失扩大,也应立即停止系统运行,及时分析原因。

以上,说的是上线之后的应对措施。如果还在开发,也应假如相应的异常处理机制才好。

以上就是关于问题【做程序时,如果某个查询方法应当返回一条记录,但是查出来多条,是抛异常好还是从多条中取第一条好?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!

喜欢 (0)