当JDBC执行删改时,会返回什么值
由于之前写PHP时,在做更新操作时,成功返回1,失败返回-1,无影响返回0。 前两天用Java语言写更新操作时,却掉坑里了。
jdbc:mysql://${jdbc.host}/${jdbc.db}?useAffectedRows=true
根据连接串配置,如果useAffectedRows等于true
成功: 返回实际更新的行数 无更新(影响)返回0 失败: 会报异常
如果useAffectedRows等于false,默认等于false。
成功: 返回更新的行数,无论有没有真正修改数据。 失败: 会报异常
结论:
- 我们不能通过简单判断,觉得大于0就是更新成功,还需要根据useAffectedRows是true或着false来决定。
- 判断失败是根据Checked Exception(CE)来决定,而不是根据else条件。
扩展
- 实际场景中,我们现在已经设置useAffectedRows=true,那怎么注意避免踩坑呢?
答:因为useAffectedRows等于true,所以在做单字段更新时,如果给定值和数据库字段值一致,则返回0这种情况。我们可以避免更新单字段,而是一起更新多个字段,比如更新人,更新时间等。这样就可以避免返回0的情况。 删除时,可以先查询数据是否存在。如果不存在,则不用删除,也可以避免返回0的情况。
- 你觉得最好的方案是什么?
答: 个人目前觉得最好的方案还是在底层封装下。调用更新删除,底层封装大于等于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.