2016-04-26 15 views
0

Gerade jetzt, ich habe die vorbereitete Erklärung unten, die funktioniert:Java PreparedStatement: Bindung Parameter zu HASHBYTES

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

p.setString(1, email); 

Aber wenn ich versuche, den Wert zu parametrieren von HASHBYTES (in diesem Fall verschlüsselt werden, die Variable 'Passwort'), gibt es eine Art von Lese-/Typ-/Konvertierungsfehler, der keine Ergebnisse liefert. Dies ist der Code, der nicht funktioniert:

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

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

Ich bekomme keine Fehlermeldung überhaupt; Das Resultset gibt "-3" in der Eigenschaft rowCount zurück. Ich verwende SQL Server.

Übergabe der 'password' Platzhalter wie folgt: '?' funktioniert auch nicht. Was wäre der richtige Weg, um diese Abfrage zu parametrisieren?

+1

Welche Fehlermeldung, wenn überhaupt, erhalten Sie? Mit welchem ​​SQL Server sprechen Sie? (MySQL, SQL Server, Oracle?) –

+0

Keine Fehlermeldung überhaupt. Das Resultset gibt "-3" in der Eigenschaft rowCount zurück, wenn das hilft. Ich benutze SQL Server. Ich werde diese Informationen zu der Frage hinzufügen. – KarasuEXE

Antwort

0

Mit Hilfe der Informationen, die Sie alle aufgezeigt und die Erforschung, wie Typen in SQL Server zu konvertieren, ich habe kam zu dem folgenden Code:

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

Bitte überprüfen, ob es für Sie arbeitet!

+0

Es hat perfekt funktioniert, danke. – KarasuEXE

0

Schauen Sie sich die SQL Server sha1 value in prepared statement gives a different value than hardcoded string

P. S Antwort auf diese Weise, weil ich nicht kann Text Kommentar vorhanden.

+0

Vielen Dank für Ihre Eingabe. Es scheint, dass der Unterschied zwischen VARCHAR- und NVARCHAR-SQL-Typen der Schlüssel zur Antwort sein könnte. Ich habe jedoch versucht, den Variablentyp auf viele Arten zu ändern (setNString, Types.NVARCHAR) und sogar versucht, die Abfrage in 'WHERE email =? UND Passwort = HASHBYTES ('SHA1', N?) ', Aber kein Erfolg. Können Sie mir helfen, die notwendigen Änderungen zu formulieren? – KarasuEXE