我对MySQL的INSERT ... ON DUPLICATE KEY UPDATE语句的返回值感到困惑。当我在MySQL客户端(mysql终端,phpmyadmin或MySQL Workbench)上尝试使用它时,执行结果将显示以下内容之一:
这些结果有意义。但是,当我在Java中(使用mysql-connector 5.1.34)执行相同的查询时,如果同时插入且没有更改,则JDBC的executeUpdate
方法返回1,而2 如果更新成功。当更新无效时,它不会返回0。
这是MySQL JDBC驱动程序的错误吗?如果是这样,是否有没有此错误的发行版?如果这不是错误,如何获得与MySQL客户端返回的结果相同的结果?
似乎您需要在驱动程序属性中手动设置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