PreparedStatement und MD5
FraFu
- java
Hallo!
Ich mache SQL Inserts über java.sql.PreparedStatements in eine MySQL DB.
Jetzt bin ich auf folgendes Problem gestoßen.
sql="INSERT INTO person(email, pwd) VALUES(?,?);
PreparedStatement ps=connection.prepareStatement(sql);
ps.setString(1, "meineemail@example.com");
ps.setString(2,"MD5('meinpwd')");
Jetzt wird natürlich in das Attribut pwd wirklich "MD5('meinpwd')" reingeschrieben und nicht die MySQL Funktion MD5 aufgerufen.
Gibt es eine Möglichkeit den Funktionsaufrufn MD5 irgendwie über das PreparedStatement reinzubekommen?
In der Klasse PreparedStatement hab ich nichts passendes gefunden. Hab ich etwas übersehen?
Ich suche sowas wie ps.setIrgendwasDasNichtpeparsedWird(..)
Ich könnte natürlich MD5('asdf') direkt in den SQL Code reinschreiben ohne PreparedStatement. Das ist aber nur umständlich möglich, da das SQL Statement von einem Framework zusammengebaut wird. Dieses Framework möchte ich nur ungern anrühren.
mfg
frafu
Hi,
ps.setString(2,"MD5('meinpwd')");
Hajo, so isch des ...
Jetzt wird natürlich in das Attribut pwd wirklich "MD5('meinpwd')" reingeschrieben und nicht die MySQL Funktion MD5 aufgerufen.
... genau.
Gibt es eine Möglichkeit den Funktionsaufrufn MD5 irgendwie über das PreparedStatement reinzubekommen?
Wenn Du Dein MD5() im Statement haben möchtest, dann schreib es doch einfach rein. Zum Statement gehört es schließlich, zum Wert hingegen nicht.
Ich suche sowas wie ps.setIrgendwasDasNichtpeparsedWird(..)
Komisch, ich dachte, Du suchst etwas wie "MD5(" und ")".
Ich könnte natürlich MD5('asdf') direkt in den SQL Code reinschreiben ohne PreparedStatement.
Mir ist nicht klar, warum Du eine SQL-Funktion und einen ihr übergebenen Wert zwangartig als Einheit sehen möchtest.
Cheatah
Hallo!
Mir ist nicht klar, warum Du eine SQL-Funktion und einen ihr übergebenen Wert zwangartig als Einheit sehen möchtest.
Weil das SQL Datenbank Framework so aufgebaut ist und nicht damit rechnet, dass da Funktionen aufgerufen werden könnten.
mfg
frafu
Hi,
Weil das SQL Datenbank Framework so aufgebaut ist und nicht damit rechnet, dass da Funktionen aufgerufen werden könnten.
laut Deinem Code liegt das Statement in Textform vor. Welches Problem besteht darin, in diesem die gewünschte Funktion zu notieren? Wird der Text vom Framework noch in Objekte o.ä. zerlegt?
Cheatah
Hallo!
Weil das SQL Datenbank Framework so aufgebaut ist und nicht damit rechnet, dass da Funktionen aufgerufen werden könnten.
laut Deinem Code liegt das Statement in Textform vor. Welches Problem besteht darin, in diesem die gewünschte Funktion zu notieren? Wird der Text vom Framework noch in Objekte o.ä. zerlegt?
Der Code war nur Beispielhaft.
Das Datenbank Framework nimmt ein Objekt her, davon alle Attribute die als Datenbankfelder definiert sind und baut damit Insert und Update Befehle zusammen um das Objekt zu speichern.
Und als Attribute sind nur normale Datenbankfelder wie String, Integer, Date, Time usw. vorgesehen, nicht aber Felder mit Funktionen.
Jetzt hab ich mir gedacht ich kann mein Problem irgendwie lösen ohne das Datenbank Framework erweitern zu müssen.
mfg
frafu
Hello,
Jetzt hab ich mir gedacht ich kann mein Problem irgendwie lösen ohne das Datenbank Framework erweitern zu müssen.
schaffst du es vielleicht, die MD5-Wandlung in Java vorher zu machen? (java.security.MessageDigest)
MfG
Rouven
Hallo!
schaffst du es vielleicht, die MD5-Wandlung in Java vorher zu machen? (java.security.MessageDigest)
Das ist wahrscheinlich die schnellste Lösung! Danke!
mfg
frafu
Moin!
Jetzt bin ich auf folgendes Problem gestoßen.
sql="INSERT INTO person(email, pwd) VALUES(?,?);
PreparedStatement ps=connection.prepareStatement(sql);
ps.setString(1, "meineemail@example.com");
ps.setString(2,"MD5('meinpwd')");
Schon mal das probiert?
~~~java
sql="INSERT INTO person(email, pwd) VALUES(?,MD5(?));
PreparedStatement ps=connection.prepareStatement(sql);
ps.setString(1, "meineemail@example.com");
ps.setString(2,"meinpwd");
- Sven Rautenberg
Hallo!
Schon mal das probiert?
sql="INSERT INTO person(email, pwd) VALUES(?,MD5(?));
Mein gezeigter Code war nur Beispielhaft, hätt ich vielleicht von Anfang an dazusagen sollen.
Wär natürlich eine Möglichkeit aber da komm ich nicht ran. Das Statement wird von einem Datenbankframework erzeugt, das ich nicht unbedingt verändern möchte.
Ich hab nur Zugriff auf das PreparedStatement und kann dort mit setIgendwas reinschreiben.
mfg
frafu