Java PreparedStatement:将参数绑定到 HASHBYTES
Java PreparedStatement: Binding Parameter to HASHBYTES
现在,我有以下准备好的声明,它有效:
SELECT email, password
FROM Professor
WHERE email = ? AND password = HASHBYTES('SHA1','" + password + "')
p.setString(1, email);
但是当我尝试参数化要通过 HASHBYTES 加密的值时(在这种情况下,变量 'password' ), 有某种 reading/type/conversion 错误不会 return 结果。这是不起作用的代码:
SELECT email, password
FROM Professor
WHERE email = ? AND password = HASHBYTES('SHA1', ?)
p.setString(1, email);
p.setString(2, password);
我没有收到任何错误信息;结果集 returns "-3" in the rowCount 属性。我正在使用 SQL 服务器.
像这样传递 'password' 占位符:'?' 也不起作用。参数化此查询的正确方法是什么?
看看这个SQL Server sha1 value in prepared statement gives a different value than hardcoded string
p.s
这样回答,因为我还不能文字评论
使用大家指出的信息并研究如何在 SQL 服务器中转换类型,我得到了以下代码:
select email, password
from Professor
where email = ?
and senha = hashbytes('sha1', convert(varchar, ?))
请验证它是否适合您!
现在,我有以下准备好的声明,它有效:
SELECT email, password
FROM Professor
WHERE email = ? AND password = HASHBYTES('SHA1','" + password + "')
p.setString(1, email);
但是当我尝试参数化要通过 HASHBYTES 加密的值时(在这种情况下,变量 'password' ), 有某种 reading/type/conversion 错误不会 return 结果。这是不起作用的代码:
SELECT email, password
FROM Professor
WHERE email = ? AND password = HASHBYTES('SHA1', ?)
p.setString(1, email);
p.setString(2, password);
我没有收到任何错误信息;结果集 returns "-3" in the rowCount 属性。我正在使用 SQL 服务器.
像这样传递 'password' 占位符:'?' 也不起作用。参数化此查询的正确方法是什么?
看看这个SQL Server sha1 value in prepared statement gives a different value than hardcoded string
p.s 这样回答,因为我还不能文字评论
使用大家指出的信息并研究如何在 SQL 服务器中转换类型,我得到了以下代码:
select email, password
from Professor
where email = ?
and senha = hashbytes('sha1', convert(varchar, ?))
请验证它是否适合您!