Blog Home
Updated: 2023 Oct 09

当JDBC执行删改时,会返回什么值

由于之前写PHP时,在做更新操作时,成功返回1,失败返回-1,无影响返回0。 前两天用Java语言写更新操作时,却掉坑里了。

jdbc:mysql://${jdbc.host}/${jdbc.db}?useAffectedRows=true

根据连接串配置,如果useAffectedRows等于true

成功:
返回实际更新的行数
无更新(影响)返回0

失败:
会报异常

如果useAffectedRows等于false,默认等于false。

成功:
返回更新的行数,无论有没有真正修改数据。

失败:
会报异常

结论:

  1. 我们不能通过简单判断,觉得大于0就是更新成功,还需要根据useAffectedRows是true或着false来决定。
  2. 判断失败是根据Checked Exception(CE)来决定,而不是根据else条件。

扩展

  1. 实际场景中,我们现在已经设置useAffectedRows=true,那怎么注意避免踩坑呢?

答:因为useAffectedRows等于true,所以在做单字段更新时,如果给定值和数据库字段值一致,则返回0这种情况。我们可以避免更新单字段,而是一起更新多个字段,比如更新人,更新时间等。这样就可以避免返回0的情况。 删除时,可以先查询数据是否存在。如果不存在,则不用删除,也可以避免返回0的情况。

  1. 你觉得最好的方案是什么?

答: 个人目前觉得最好的方案还是在底层封装下。调用更新删除,底层封装大于等于0就是更新成功返回1,否则异常返回-1。当然也可以根据上面说的PHP方案在做更新操作时,成功返回1,失败返回-1,无影响返回0。如果你有不同的见解或想法也欢迎留言讨论。

Comments:

Email questions, comments, and corrections to hi@smartisan.dev.

Submissions may appear publicly on this website, unless requested otherwise in your email.