FraFu: PreparedStatement und MD5

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. 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

          1. 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

            --
            -------------------
            He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
            1. 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

  2. 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

    --
    "Love your nation - respect the others."
    1. 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