mysql中返回执行update语句时受影响的行数

偶然看到有人问这个问题,然后试了一下executeUpdate();

1
preparedStatement.executeUpdate();

发现返回的是匹配查询条件的行数,并非受影响的行,在数据命令行中的表现形式为:

1
2
3
MariaDB [java]> UPDATE user SET username='1' WHERE uid=1 OR uid=2;
Query OK, 0 rows affected (0.48 sec)
Rows matched: 2 Changed: 0 Warnings: 0

即返回的结果是matched,并非changed,

解决方案:

在连接数据库的url中增加一个参数:useAffectedRows=true
如下:

1
String url="jdbc:mysql://localhost:3306/java?useAffectedRows=true";

之后,使用executeUpdate返回的即是受影响的行数。

!注意:此参数只有在mysql-connector版本大于5.1.7的情况下才有效。