关于数据库操作异常处理问题

关于数据库操作异常处理问题

问题描述:

为什么到现在我们基本没有验证数据库增删改查的操作

https://img1.sycdn.imooc.com/climg/65488a6a092be9c106740262.jpg

但是以前项目初期都在验证

https://img1.sycdn.imooc.com/climg/65488aad09e144e714990411.jpg

相关代码:

int count = productMapper.insertSelective(product);
if(count==0){
    throw new GameManagerException(GameManagerExceptionEnum.CREATE_FAILED);
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-11-06 15:54:01

同学你好,同学提供的这段代码的业务逻辑中,并不需要进行验证。因为删除购物车的时候,是在前端页面进行勾选之后,将商品对应的ID直接传递给了后端Java代码,这部分是完全不涉及数据库的,所以不需要进行验证。而且,既然用户在前端页面可以看到对应ID的商品,那么这个ID就一定存在,因为前端看到的数据是从后端查询数据库之后回显上去的。

但同学截图中的添加操作就不一样了,因为数据是从无到有的,除ID之外所有的内容都是手动写入的,而不是从数据库查询并回显的,那么就需要进行名称重复性等验证了。

归根结底就是,两个业务数据的来源不一样,前者是数据库查询回显的,后者是手动输入的。

祝学习愉快~

  • 提问者 Journe #1

    我的意思是这个验证操作,

    int count = categoryMapper.updateByPrimaryKeySelective(category);
    if (count == 0) {
        throw new GameManagerException(GameManagerExceptionEnum.UPDATE_FAILED);
    }

    之前更删改查都会验证回调的count,为什么现在都不验证了

    2023-11-06 20:52:21
  • 好帮手慕小蓝 回复 提问者 Journe #2

    同学你好,是否进行验证是取决于业务逻辑的,如上面的回答所说:

    1.数据来源于前端,既然可以勾选,说明数据库中一定存在这条数据;

    2.既然存在数据,那么删除时一定是可以删除这条数据的;

    3.在增删改操作中,是一定会保证业务事务的,那么这条数据一定可以删除成功的。

    4.既然删除必然成功,那么返回的删除条数必然不是0,此时验证是否为0就没意义了。

    综上,只要业务设计时考虑到了实物一致性,那么就不需要进行验证。


    同学提供的这段代码中,与前面的业务逻辑完全不同。在添加时,是可能存在数据冲突,导致添加失败的。而这个添加失败是在数据库中发生的,所以需要进行验证。换言之,这个业务逻辑中,“添加成功”不是“必然”发生的,那么就需要进行逻辑上的验证。

    祝学习愉快~

    2023-11-07 09:03:14
  • 提问者 Journe 回复 好帮手慕小蓝 #3

    网络问题:数据库通常作为服务器运行,如果网络连接中断或不稳定,可能导致数据库操作失败。

    权限问题:用户没有足够的权限对特定的数据表或记录进行操作。例如,尝试修改只读表,或没有赋予权限的表。

    数据完整性和约束:例如,试图插入违反唯一性约束(如主键)的重复值,或违反其他的数据完整性规则(如非空约束、引用完整性等)。

    错误的SQL语句:语法错误,使用了不存在的表或列,查询条件错误等。

    数据库锁定:当一个事务在运行过程中,另一个事务试图访问相同的资源时,由于锁定而导致的操作失败。

    超时:长时间未能完成的操作可能会因超时而失败。

    数据库资源耗尽:如磁盘空间不足,内存不足等。

    数据类型不匹配:如试图将字符串数据插入到整型字段。

    服务器故障或维护:数据库服务器突然停止工作,或者正在进行系统维护。

    并发问题:多个用户或程序同时修改数据,可能会产生并发冲突。

    以上都可能导致数据库的增删改查操作失败,请注意我只是拿截图的代码举例,问的是之前很多都做了count的验证,为什么后面不做了,老师在课中讲过不能相信前端的数据,怎么就能臆断请求是前端发来的,而不是我们测试自己随意组合的请求?

    2023-11-07 15:10:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java工程师 2024版
  • 参与学习       2020    人
  • 提交作业       1249    份
  • 解答问题       1202    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师