2011-11-04 56 views
5

如何在H2數據庫的CREATE TABLE請求中執行ON UPDATEH2DB - 腳本SQL ON UPDATE CREATE TABLE請求

語境:

我使用的是SQL的Maven的插件(1.5)在我的項目的H2數據庫,生成的表。

但是當我調用腳本sql時,我有一個org.h2.message.DbException.getJdbcSQLException

我的腳本:

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

回答

6

H2不支持 「ON UPDATE」。不過,我想你可以使用一個computed column代替?:

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

OK,感謝你的回答。我會看看這個。 – user1029346

+0

@Thomas Mueller在UPDATE上完成這項工作,或只在CREATE上完成這項工作? – igr

+0

這個問題已經很老了,H2現在支持「ON UPDATE」。但是,如果您要求「IF EXISTS」:這僅支持「CREATE」。 –

0

添加到您的SQL文件:

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"; 

創建一個Java類,並添加到您的測試類路徑:

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())); 
    } 
}