Java 通过JDBC更新用户密码无效

Java 通过JDBC更新用户密码无效,java,mysql,jsp,jdbc,Java,Mysql,Jsp,Jdbc,这是相关的代码位 createconn = new CreateConnection(); con = createconn.connect_to_database(); String SQL = "UPDATE User SET Password = SHA2(?,512) WHERE Login = ? AND Password = SHA2(?,512)"; stmt = con.prepareStatement(SQL); stmt.setString(1, NewPassword);

这是相关的代码位

createconn = new CreateConnection();
con = createconn.connect_to_database();
String SQL = "UPDATE User SET Password = SHA2(?,512) WHERE Login = ? AND Password = SHA2(?,512)";
stmt = con.prepareStatement(SQL);
stmt.setString(1, NewPassword);
stmt.setString(2, Login);
stmt.setString(3, CurrentPassword);
int count = stmt.executeUpdate();
System.out.println("Rows affected: " + count);
count始终设置为0,即即使当前密码正确,也不会更新任何行。更糟糕的是,没有生成异常。(即使当前密码错误)

当我使用一个固定语句(对三个参数使用固定值)时,代码是有效的,但这样编写时就不行了

整个代码都在一个函数中,该函数将三个参数作为参数


非常感谢您的帮助。

密码是一个保留字,也许工作台更为宽松/智能。尝试在周围添加回刻度

`Password`

可能没有具有给定登录名和哈希值的用户。当我在MySQL终端中运行相同的查询时,(使用值而不是?),它工作了。在这种情况下,您还需要使用现有密码吗?您是否可以尝试仅提供登录名并查看其是否有效,以缩小问题的范围?尝试在执行后将参数传递到方法中。您在
stmt.setString(1,NewPassword)中的何处设置变量;stmt.setString(2,登录);stmt.setString(3,当前密码)?“下面的列表显示了MySQL 8.0中的关键字和保留字,以及不同版本中对单个字的更改。保留的关键字标记为(R)。“检查密码是否保留,如果密码后面有
(R)
,密码只是一个关键字。@RaymondNijland是的,用户和密码我自己都不敢使用(为了清洁),但不应该造成问题。可以执行
选择SHA2(“…”,512)
来检查数据库。错误是什么?在插入密码时提交失败。PreparedStatement
stmt
重复用于其他语句。我忘记了。