2011-11-04 10 views
5

ON UPDATECREATE TABLE एच 2 डेटाबेस में अनुरोध कैसे करें।एच 2 डीबी - तालिका अनुरोध अनुरोध में अद्यतन पर स्क्रिप्ट एसक्यूएल

प्रसंग:

मैं एसक्यूएल-Maven-प्लगइन (1.5) का उपयोग कर रहा अपने प्रोजेक्ट में एक h2 डेटाबेस में एक मेज उत्पन्न करने के लिए।

लेकिन जब मैं स्क्रिप्ट एसक्यूएल कहता हूं, तो मेरे पास org.h2.message.DbException.getJdbcSQLException है।

मेरे स्क्रिप्ट:

CREATE TABLE IF NOT EXISTS TEST(
    DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
); 

उत्तर

6

एच 2 "अद्यतन पर" का समर्थन नहीं करता। लेकिन मुझे लगता है कि आप एक computed column बजाय

?:
CREATE TABLE IF NOT EXISTS TEST(
    DATE timestamp AS CURRENT_TIMESTAMP 
); 
+0

ठीक है, जवाब के लिए धन्यवाद। मैं इसे देख लूंगा। – user1029346

+0

@ थॉमस म्यूएलर इस काम को अद्यतन पर या केवल CREATE पर करता है? – igr

+0

यह प्रश्न काफी पुराना है, और एच 2 अब "अद्यतन पर" का समर्थन करता है। लेकिन अगर आप "अगर EXISTS" के लिए पूछते हैं: यह केवल "CREATE" के लिए समर्थित है। –

0

अपने एसक्यूएल फ़ाइल में जोड़े इस्तेमाल कर सकते हैं:

CREATE TABLE IF NOT EXISTS my_table (
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
); 
CREATE TRIGGER my_trigger 
    BEFORE UPDATE 
    ON my_table 
    FOR EACH ROW CALL "org.h2.trigger.UpdatedAtTrigger"; 

एक जावा वर्ग बनाएँ और अपने परीक्षण classpath में जोड़ें:

package org.h2.trigger; 

import java.sql.*; 
import java.time.Instant; 
import org.h2.tools.TriggerAdapter; 

public class UpdatedAtTrigger extends TriggerAdapter { 

    @Override 
    public void fire(Connection conn, ResultSet oldRow, ResultSet newRow) throws SQLException { 
    newRow.updateTimestamp("updated_at", Timestamp.from(Instant.now())); 
    } 
}