使用MySQL驱动对MYSQL进行update操作时返回值注意UseAffectedRows

当我们进行update操作时,时常会根据update的结果进行一些逻辑判断,如返回值大于1表示更新成功,为0表示更新失败。

但是使用Mysql驱动连接数据库并进行update操作时,返回值可能不在预期。

如SQL1:update task_info SET task_status=2 where id=?

这个sql无论执行多少遍,update返回值都可能是1。原因在于MySQL的连接URL。

最简单的MySQL连接URL:

jdbc:mysql://127.0.0.1:3306/cn_appoint?characterEncoding=utf-8

这样写执行简单的操作没有异常抛出,但是当执行update的时候,以上SQL1返回值一直会大于0。

原因是执行update默认返回的是where条件match的条件数,在SQL1中,由于where条件为id=?,无论更新多少次,where条件总能match一条数据,所以update返回值一直等于1.

解决这个问题有两个方法:

方法1:

SQL写的更严密一些,多写上一些条件,而更新的字段作为其中的条件。

如SQL2:update task_info SET task_status=2 where id=? and task_status=0

扫描二维码关注公众号,回复: 2236186 查看本文章

这样的结果是当你更新完成后,再次执行的时候,根据where条件match到的数据条数为0,按照这个逻辑进行处理是没问题的,但是这样做并不严密。

方法2:

对mysqlURL进行修改,添加参数useAffectedRows=true。

jdbc:mysql://127.0.0.1:3306/cn_appoint?characterEncoding=utf-8&useAffectedRows=true
useAffectedRows的作用在于是否用受影响的行数替代查找到的行数来返回数据,默认 false。指定这个值后,更新时会返回更新的行数,按照SQL1执行update操作也会返回正常值,即第一次返回1,第二次返回0.

猜你喜欢

转载自blog.csdn.net/sjzylc/article/details/80990024
今日推荐