Java PreparedStatement:将参数绑定到HASHBYTES

时间:2016-04-26 19:06:56

标签: java sql web-services rest hashbytes

现在,我已经准备好了下面的声明,该声明有效:

SELECT email, password
FROM Professor 
WHERE email = ? AND password = HASHBYTES('SHA1','" + password + "') 

p.setString(1, email);

但是当我尝试通过 HASHBYTES (在这种情况下,变量'password')参数化要加密的值时,有某种读/类型/转换错误,不返回结果。这是不起作用的代码:

SELECT email, password
FROM Professor 
WHERE email = ? AND password = HASHBYTES('SHA1', ?) 

p.setString(1, email);
p.setString(2, password);

我根本没有收到任何错误消息;结果集在rowCount属性中返回“-3”。我正在使用 SQL Server

传递'密码'占位符,如下所示:'?'也不起作用。参数化此查询的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

看看这个SQL Server sha1 value in prepared statement gives a different value than hardcoded string

P.S 以这种方式回答,因为我还不能发表评论。

答案 1 :(得分:0)

使用您所指出的信息并研究如何在SQL Server中转换类型,我已经得到了以下代码:

select email, password
  from Professor
 where email = ?
   and senha = hashbytes('sha1', convert(varchar, ?))

请确认它是否适合你!