org.h2.jdb c .JdbcSQLException: неизвестный тип данных: "DATEADD"; SQL заявление - PullRequest
0 голосов
/ 13 апреля 2020

Я использую h2 для ввода БД во время выполнения и тестирования, все работало нормально, пока я не попытался сделать поле даты текущим, а не жестко запрограммированным. Я думал, что это связано с версией jdb c, которую я обновил, и обновил библиотеку spring jdb c, чтобы быть последней, но это не решило проблему.

Это код, который я использую для ввода данных как во время выполнения, так и во время тестирования:

Этот код выполняется во время выполнения и прекрасно работает до того, как я попытался чтобы сделать дату текущей.

        ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
        resourceDatabasePopulator.addScript(new ClassPathResource("schema.sql"));
        resourceDatabasePopulator.addScript(new ClassPathResource("data.sql"));
        DatabasePopulatorUtils.execute(resourceDatabasePopulator, dataSource); // This is what the DataSourceInitializer does.


В целях тестирования я использую этот код, как я уже говорил, он работал отлично, прежде чем я попытался сделать дату текущей.

        DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
                .addScript("classpath:schema.sql")
                .addScript("classpath:data.sql")
                .build();

данные. sql файл

INSERT INTO  TABLE_X (
  dayxx,
  xxx
) VALUES
(CONVERT(char(50), DATEADD('DAY', -1,CURRENT_DATE()),126),'xxx')


Исключение

Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Unknown data type: "DATEADD"; SQL statement:
INSERT INTO TABLE_X ( dayxx, xxx ) VALUES (CONVERT(char(50), DATEADD('DAY', -1,CURRENT_DATE()),126),'XXX') [50004-200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:505)
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
    at org.h2.message.DbException.get(DbException.java:205)
    at org.h2.message.DbException.get(DbException.java:181)
    at org.h2.command.Parser.parseColumnWithType(Parser.java:5971)
    at org.h2.command.Parser.readFunctionParameters(Parser.java:3793)
    at org.h2.command.Parser.readFunction(Parser.java:3772)
    at org.h2.command.Parser.readTerm(Parser.java:4305)
    at org.h2.command.Parser.readFactor(Parser.java:3343)
    at org.h2.command.Parser.readSum(Parser.java:3330)
    at org.h2.command.Parser.readConcat(Parser.java:3305)
    at org.h2.command.Parser.readCondition(Parser.java:3108)
    at org.h2.command.Parser.readExpression(Parser.java:3059)
    at org.h2.command.Parser.parseValuesForCommand(Parser.java:1877)
    at org.h2.command.Parser.parseInsertGivenTable(Parser.java:1817)
    at org.h2.command.Parser.parseInsert(Parser.java:1749)
    at org.h2.command.Parser.parsePrepared(Parser.java:954)
    at org.h2.command.Parser.parse(Parser.java:843)
    at org.h2.command.Parser.parse(Parser.java:815)
    at org.h2.command.Parser.prepareCommand(Parser.java:738)
    at org.h2.engine.Session.prepareLocal(Session.java:657)
    at org.h2.engine.Session.prepareCommand(Session.java:595)
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:212)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:201)
    at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:472)
    ... 53 more



1 Ответ

1 голос
/ 13 апреля 2020

Как указано в документах , функция преобразования выглядит следующим образом:

CONVERT (value, dataType)

Преобразует значение в другой тип данных.

Пример:

CONVERT (NAME, INT)

Поскольку вы передаете

CONVERT (символ (50), DATEADD ('DAY', -1, CURRENT_DATE ()), 126)

В сообщении об ошибке указывается, что DATEADD не является допустимым типом данных, поскольку это значение, а не тип, поэтому попробуйте использовать правильный синтаксис.

...