MySQL "INSERT ... ON DUPLICATE KEY UPDATE" on Java:如何区分 Inserted/Updated/NoChange 状态

MySQL "INSERT ... ON DUPLICATE KEY UPDATE" on Java: How to Differ Inserted/Updated/NoChange states

我对 MySQL 的 INSERT ... ON DUPLICATE KEY UPDATE 语句的 return 值感到困惑。当我在 MySQL 客户端(mysql 终端、phpmyadmin 或 MySQL Workbench)上尝试时,执行结果为以下之一:

这些结果是有道理的。但是,当我在 Java(使用 mysql-connector 5.1.34)中执行相同的查询时,JDBC 的 executeUpdate 方法 returns 1 如果插入且没有变化, 2 如果成功更新。它不会 return 0 当更新无效时。

这是 MySQL JDBC 驱动程序的错误吗?如果是这样,是否有没有这个错误的版本?如果这不是错误,我怎样才能得到与 MySQL 客户端 return 相同的结果?

看来您需要在驱动程序属性中手动设置 useAffectedRows

我在谷歌搜索后得到了解决方案。你可以参考这个 MySql Bug for this INSERT ON DUPLICATE KEY UPDATE return 0 if no change in JDBC ExecuteUpdate

也在讨论中说他们在 5.1.7 中发布了它

编辑你的第二个问题:

useAffectedRows:

Don't set the CLIENT_FOUND_ROWS flag when connecting to the server (not JDBC-compliant, will break most applications that rely on "found" rows vs. "affected rows" for DML statements), but does cause "correct" update counts from "INSERT ... ON DUPLICATE KEY UPDATE" statements to be returned by the server.

默认值:假

开始版本:5.1.7

引用 useAffectedRows in JDBC Connector-j