gpt4 book ai didi

java - 执行 ON DUPLICATE KEY UPDATE v=v 时,MySql java 驱动程序返回 1

转载 作者:行者123 更新时间:2023-11-29 17:01:10 24 4
gpt4 key购买 nike

我正在执行相同的 sql 命令 ON DUPLICATE KEY UPDATE v=v有两种方式。

命令:INSERT INTO VS (v) VALUES ('someValue') ON DUPLICATE KEY UPDATE v=v;

两种方式给出不同的结果:

  1. 当使用 native mysql 客户端并且满足约束时,受影响的行数为 0。消息:Query OK, 0 rows affected (0.14 sec)
  2. 使用 mysql jdbc 驱动程序 ( mysql-connector-java-8.0.11.jar ) 并使用 int res = ps.executeUpdate(...) 执行相同的命令时,结果为1。

从java文档来看,结果是the row count for SQL Data Manipulation Language (DML) statements ,但没有更新,也没有插入。

此外,请调用ps.getUpdateCount() ,执行后也返回1。

为什么结果是在 mysql java 驱动程序 1 中,而没有任何内容应该更新?谢谢。

为了清楚起见,表创建如下所示: CREATE TABLE IF NOT EXISTS VS (v VARCHAR(128) NOT NULL, PRIMARY KEY (v))

最佳答案

参见例如mysql_affected_rows() :

For INSERT ... ON DUPLICATE KEY UPDATE statements, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values. If you specify the CLIENT_FOUND_ROWS flag, the affected-rows value is 1 (not 0) if an existing row is set to its current values.

请参阅 JDBC connection property useAffectedRows:

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.

Default: false

Since version: 5.1.7

因此,如果您希望更新计数的非标准行为仅对受影响行进行计数,而不是对找到行进行标准计数,则需要指定连接属性。

关于java - 执行 ON DUPLICATE KEY UPDATE v=v 时,MySql java 驱动程序返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com