Java上的MySQL“ INSERT…ON DUPLICATE KEY UPDATE”:如何区分插入/更新/ NoChange状态

问题描述 投票:3回答:1

我对MySQL的INSERT ... ON DUPLICATE KEY UPDATE语句的返回值感到困惑。当我在MySQL客户端(mysql终端,phpmyadmin或MySQL Workbench)上尝试使用它时,执行结果将显示以下内容之一:

  • 1:如果插入了新记录(即没有重复的键)。
  • 2:如果在重复键的情况下更新了现有记录。
  • 0:如果执行更新,但未更改列值。

这些结果有意义。但是,当我在Java中(使用mysql-connector 5.1.34)执行相同的查询时,如果同时插入且没有更改,则JDBC的executeUpdate方法返回1,而2 如果更新成功。当更新无效时,它不会返回0。

这是MySQL JDBC驱动程序的错误吗?如果是这样,是否有没有此错误的发行版?如果这不是错误,如何获得与MySQL客户端返回的结果相同的结果?

java mysql jdbc insert-update
1个回答
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

参考useAffectedRows in JDBC Connector-j

© www.soinside.com 2019 - 2024. All rights reserved.