我对MySQL的INSERT … ON DUPLICATE KEY UPDATE语句的返回值感到困惑。当我在MySQL客户端(mysql终端,phpmyadmin或MySQL Workbench)上尝试使用它时,执行结果将显示以下内容之一:
这些结果是有道理的。但是,当我使用Java(使用mysql-connector 5.1.34)在Java中执行相同的查询时,如果同时插入并且没有更改,则JDBC的executeUpdate方法返回 1 ,如果成功更新,则返回 2 。当更新无效时,它不会返回0。
executeUpdate
这是MySQL JDBC驱动程序的错误吗?如果是这样,是否有没有此错误的发行版?如果这不是错误,那么如何获得与MySQL客户端返回的结果相同的结果?
似乎您需要 useAffectedRows 手动设置驱动程序属性。
useAffectedRows
经过一番谷歌搜索后,我得到了解决方案。如果JDBC ExecuteUpdate中没有更改,则可以将此INSERT ON DUPLICATE KEY UPDATE返回0的 MySql Bug引用。
同样在讨论中指出他们在5.1.7中发布了它
编辑第二个问题:
useAffectedRows :
连接到服务器时不要设置CLIENT_FOUND_ROWS标志(不兼容JDBC,将破坏大多数依赖“发现”行与“受影响行”的DML语句的应用程序),但确实会导致“”的更新计数“正确”服务器将返回“ INSERT … ON DUPLICATE KEY UPDATE”语句。
默认值:false
由于版本:5.1.7
JDBC Connector-j中的参考useAffectedRows