2012-05-05 19 views
5

का उपयोग कर पोस्टग्रेएसक्यूएल ट्रिगर बनाएं, मैं Play2.0 डेटाबेस विकास स्क्रिप्ट में पोस्टग्रेएसक्यूएल ट्रिगर बनाने की कोशिश कर रहा हूं। एसक्यूएल कोड अपेक्षाकृत आसान है और pgAdminIII में ठीक चलाता है:जेडीबीसी

CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$ 
    BEGIN 
    NEW.modified = now(); 
    RETURN NEW; 
    END; 
$$ LANGUAGE 'plpgsql'; 

हालांकि, जब विकास चल रहा है मैं एक त्रुटि मिलती है: ERROR: unterminated dollar-quoted string at or near "$$ BEGIN NEW.modified = now()"। एसक्यूएल कोड को पर फंसे हुए पहले अर्धविराम पर छंटनी लगती है। मैं PostgreSQL के लिए "9.1-901.jdbc4" जेडीबीसी ड्राइवर का उपयोग कर रहा हूं।

अद्यतन:

Evolutions.scala में कोड (लाइन 219+) ; पर एक साधारण विभाजन प्रदर्शन करती है। फ्रेमवर्क में खुद को दोषपूर्ण लगता है:

// Execute script 
s.sql.split(";").map(_.trim).foreach { 
    case "" => 
    case statement => execute(statement) 
} 

कोई समाधान?

+0

समस्या पर चर्चा की गई है [यहां] (http://archives.postgresql.org/pgsql-jdbc/2010-03/msg00056.php) साथ ही साथ। – fynn

+0

कृपया हमें जावा कोड दिखाएं जो ट्रिगर बनाता है। –

+0

एसक्यूएल स्क्रिप्ट एक [प्ले डेटाबेस विकास स्क्रिप्ट] (http://www.playframework.org/documentation/2.0/Evolutions) है क्योंकि ट्रिगर बनाता है जो कोड मेरा नहीं है। मुझे लगता है कि (स्कैला!) कोड पाया जा सकता है [यहां] (https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/db/evolutions /Evolutions.scala)। – fynn

उत्तर

2

आप निम्न चीज़ें आज़मा सकते हैं।

String sql = "CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$ " + 
      "BEGIN " + 
       "NEW.modified = now(); " + 
       "RETURN NEW; " + 
       "END; " + 
      "$$ LANGUAGE 'plpgsql';"; 
    DataSource ds = getDataSource(); 
    try { 
     Connection conn = ds.getConnection(); 
     conn.setAutoCommit(true); 
     Statement st = conn.createStatement(); 
     st.executeUpdate(sql); 
     st.close(); 
     conn.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

आशा है कि यह आपके लिए काम करेगा।

+0

और कोड के लिए सही जगह कहां होगी? विकास का मूल्यांकन करने से पहले इसे निष्पादित करने की आवश्यकता है। 'ग्लोबल' की 'ऑनस्टार्ट' विधि गलत जगह प्रतीत होती है ... – fynn