我对MySQL INSERT ... ON DUPLICATE KEY UPDATE声明的返回值感到困惑。当我在MySQL客户端(mysql终端,phpmyadmin或MySQL Workbench)上尝试时,执行结果如下:
这些结果很有意义。但是,当我在Java中执行相同的查询(使用mysql-connector 5.1.34)时,JDBC的executeUpdate
方法返回 1 插入和不更改,以及 2 ,以便更新成功。当更新无效时,它不会返回0。
这是MySQL JDBC驱动程序的错误吗?如果是这样,是否有一个没有这个bug的版本?如果这不是错误,我如何获得MySQL客户端返回的相同结果?
答案 0 :(得分:5)
似乎您需要手动在驱动程序属性中设置 useAffectedRows
。
我在谷歌搜索后得到了解决方案。您可以参考此INSERT ON DUPLICATE KEY UPDATE return 0 if no change in JDBC ExecuteUpdate
的MySql Bug同样在讨论中声明他们在5.1.7中发布了
编辑你的第二个问题:
<强> useAffectedRows 强>:
连接到服务器时不要设置CLIENT_FOUND_ROWS标志(不符合JDBC标准,会破坏大多数依赖于“找到”行和DML语句“受影响行”的应用程序),但会导致“正确”更新从服务器返回的“INSERT ... ON DUPLICATE KEY UPDATE”语句计算。
默认值:false
自版本:5.1.7