gpt4 book ai didi

java - Out 参数在 MySQL 中有效,但在 JDBC 中无效,始终返回相同的值

转载 作者:行者123 更新时间:2023-11-29 18:25:34 24 4
gpt4 key购买 nike

这个过程在 MySQL 中运行良好,并返回正确的值,但是当使用 JDBC 时,它总是返回 1。

在 MySQL 中,当我调用此过程时,当行被更新时,我将得到 1,当没有更新时,我将得到 0。

在 JDBC 中,无论什么它总是返回 1。

我尝试了不同的 JDBC 驱动程序,但没有结果,我也没有在这里找到解释为什么会发生这种情况。当然,我们可以使用不同的代码来获得相同的结果,但是任何人都可以解释为什么会发生这种情况吗?

程序

CREATE DEFINER=`root`@`localhost` PROCEDURE `UPDATE_PARTICIPANT`(
IN
p_id int(11),
p_first_name VARCHAR(45),
OUT
p_suceed INT(11)
)
BEGIN
UPDATE `appdb`.`participants`
SET `id`=p_id,
first_name = p_first_name
WHERE `id`= p_id;
SET p_suceed = ROW_COUNT();
END

JDBC

    Connection conn = null;
try {
conn =
DriverManager.getConnection("jdbc:mysql://localhost/appdb?" +
"user=root&password=password&serverTimezone=UTC");
} catch (SQLException ex) {
}

int id = 3;
String firstName = "updatedName";

CallableStatement cStmt = conn.prepareCall("{CALL UPDATE_PARTICIPANT(?,?,?)}");
cStmt.setInt(1, id);
cStmt.setString(2, firstName);
cStmt.registerOutParameter(3,java.sql.Types.INTEGER);
cStmt.execute();
int outputValue = cStmt.getInt(3);
System.out.println(outputValue);

谢谢。

编辑:

我制作了一个简短的视频来更好地说明问题:https://www.youtube.com/watch?v=x_WpngvO8o0&feature=youtu.be大家请重点关注为什么MySQL中的变量可以正确传递,而我们在JDBC中却无法获取它:)

编辑2:

For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.

这可能是原因,默认情况下 JDBC 驱动程序已启用此功能。

最佳答案

This could be the cause, by default JDBC driver has [CLIENT_FOUND_ROWS] on.

这是正确的。根据 MySQL Connector/J 开发团队对 JDBC 规范的解释,UPDATE 语句应该返回该语句匹配的行数,而不是实际更改的行数。

如果我们希望 ROW_COUNT() 反射(reflect)实际更改的行数,那么我们需要包含该参数

useAffectedRows=true

在我们的 JDBC 连接 URL 中。

关于java - Out 参数在 MySQL 中有效,但在 JDBC 中无效,始终返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228492/

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