2016-04-26 83 views
0

現在,我已經準備好的語句下面,它的工作原理:的Java的PreparedStatement:綁定參數HASHBYTES

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

p.setString(1, email); 

但是,當我嘗試參數由HASHBYTES加密值(在這種情況下,變量'密碼'),有某種閱讀/類型/轉換錯誤,不返回結果。這是不起作用的代碼:

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

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

我根本沒有收到任何錯誤信息;結果集在rowCount屬性中返回「-3」。我正在使用SQL Server

通過'密碼'佔位符是這樣的:'?'也不工作。什麼是參數化這個查詢的正確方法?

+1

你有什麼錯誤信息,如果有的話?你在和哪個SQL服務器通話? (MySQL,SQL Server,Oracle?) –

+0

完全沒有錯誤信息。如果有幫助,結果集在rowCount屬性中返回「-3」。我正在使用SQL Server。 我會將此信息添加到問題中。 – KarasuEXE

回答

0

使用大家指出並研究如何轉換類型在SQL Server中的信息,我已經來到了下面的代碼:

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

請驗證它是否適合你!

+0

它工作完美,謝謝。 – KarasuEXE

0

看這個SQL Server sha1 value in prepared statement gives a different value than hardcoded string

P.S 這樣的答案,因爲我不能文本評論。

+0

感謝您的意見。看起來,VARCHAR和NVARCHAR SQL Types之間的區別可能是答案的關鍵。 但是,我嘗試以多種方式更改變量類型(setNString,Types.NVARCHAR),甚至嘗試將查詢更改爲 'WHERE email =? AND password = HASHBYTES('SHA1',N?)',但沒有成功。你能幫我制定必要的改變嗎? – KarasuEXE