2011-11-04 8 views
5

Jak wykonać żądanie ON UPDATE w żądaniu CREATE TABLE w bazie danych H2.H2DB - skrypt SQL ON UPDATE w CREATE TABLE request

Kontekst:

Używam SQL-maven-plugin (1.5), aby wygenerować tabelę w bazie danych H2 w moim projekcie.

Ale kiedy wywołuję skrypt sql, mam org.h2.message.DbException.getJdbcSQLException.

Mój skrypt:

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

Odpowiedz

6

H2 nie obsługuje "ON UPDATE". Ale myślę, że można użyć computed column zamiast ?:

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

ok, Dziękuję za odpowiedź. Popatrzę na to. – user1029346

+0

@Thomas Mueller wykonuje to zadanie na UPDATE lub tylko na CREATE? – igr

+0

To pytanie jest dość stare, a H2 obsługuje teraz "ON UPDATE". Ale jeśli poprosisz o "IF EXISTS": jest to obsługiwane tylko dla "CREATE". –

0

Dodaj do pliku 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"; 

Utwórz klasę Java i dodać do swojej ścieżce klasy testowej:

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())); 
    } 
} 
Powiązane problemy