При выполнении ddl ниже выдается org.h2.jdbc.JdbcSQLException. Конечно, я тестировал его в изолированной среде, без каких-либо других sql. Еще больше смущает то, что сообщение об ошибке не содержит никаких подсказок, кроме [42000-196]. Я уже проверил некоторую грамматику, специфичную для h2, к которой относится этот sql на Официальный веб-сайт, но есть ли особая грамматика, которую я пропустил?
sql
CREATE TABLE Product
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
`title` VARCHAR(1000) NULL COMMENT 'title',
`price` INT NULL COMMENT 'price',
`simpledesc` VARCHAR(1000) NULL COMMENT 'simpledesc',
`content` TEXT NULL COMMENT 'content',
`stock` INT NULL COMMENT 'stock',
`seq` INT NULL COMMENT 'product 끼리의 순서',
`categoryid` INT NULL,
`timelog` DATETIME NOT NULL DEFAULT now() COMMENT 'timelog',
PRIMARY KEY (id)
);
Сообщения об ошибках на консоли
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "[*] CREATE TABLE Product ( id BIGINT NOT NULL COMMENT 'id', title VARCHAR(1000) NULL COMMENT 'title', price INT NULL COMMENT 'price', simpledesc VARCHAR(1000) NULL COMMENT 'simpledesc', content TEXT NULL COMMENT 'content', stock INT NULL COMMENT 'stock', seq INT NULL COMMENT 'product 끼리의 순서', categoryid INT NULL, timelog DATETIME NOT NULL DEFAULT now() COMMENT 'timelog', PRIMARY KEY (id) )"; SQL statement:
CREATE TABLE Product ( id BIGINT NOT NULL COMMENT 'id', title VARCHAR(1000) NULL COMMENT 'title', price INT NULL COMMENT 'price', simpledesc VARCHAR(1000) NULL COMMENT 'simpledesc', content TEXT NULL COMMENT 'content', stock INT NULL COMMENT 'stock', seq INT NULL COMMENT 'product 끼리의 순서', categoryid INT NULL, timelog DATETIME NOT NULL DEFAULT now() COMMENT 'timelog', PRIMARY KEY (id) ) [42000-196]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[h2-1.4.196.jar:1.4.196]
at org.h2.message.DbException.get(DbException.java:179) ~[h2-1.4.196.jar:1.4.196]
at org.h2.message.DbException.get(DbException.java:155) ~[h2-1.4.196.jar:1.4.196]
at org.h2.message.DbException.getSyntaxError(DbException.java:191) ~[h2-1.4.196.jar:1.4.196]
at org.h2.command.Parser.getSyntaxError(Parser.java:534) ~[h2-1.4.196.jar:1.4.196]
at org.h2.command.Parser.parsePrepared(Parser.java:492) ~[h2-1.4.196.jar:1.4.196]
at org.h2.command.Parser.parse(Parser.java:321) ~[h2-1.4.196.jar:1.4.196]
at org.h2.command.Parser.parse(Parser.java:297) ~[h2-1.4.196.jar:1.4.196]
at org.h2.command.Parser.prepareCommand(Parser.java:258) ~[h2-1.4.196.jar:1.4.196]
at org.h2.engine.Session.prepareLocal(Session.java:578) ~[h2-1.4.196.jar:1.4.196]
at org.h2.engine.Session.prepareCommand(Session.java:519) ~[h2-1.4.196.jar:1.4.196]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204) ~[h2-1.4.196.jar:1.4.196]
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:176) ~[h2-1.4.196.jar:1.4.196]
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:164) ~[h2-1.4.196.jar:1.4.196]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-2.7.8.jar:na]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-2.7.8.jar:na]
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:471) ~[spring-jdbc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
... 121 common frames omitted




Думаю, ошибка в этой строчке:
`timelog` DATETIME NOT NULL DEFAULT now() COMMENT 'timelog',
Обновите это как и затем проверьте, появляется ли ошибка:
`timelog` DATETIME NOT NULL COMMENT 'timelog',
-------- ОБНОВЛЕНО -------
Сначала попробуйте это без этой функции (), я тестировал эту
CREATE TABLE Product
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
`title` VARCHAR(1000) DEFAULT NULL COMMENT 'title',
`price` INT DEFAULT NULL COMMENT 'price',
`simpledesc` VARCHAR(1000) DEFAULT NULL COMMENT 'simpledesc',
`content` TEXT DEFAULT NULL COMMENT 'content',
`stock` INT DEFAULT NULL COMMENT 'stock',
`seq` INT DEFAULT NULL COMMENT 'product 끼리의 순서',
`categoryid` INT DEFAULT NULL,
`timelog` DATETIME NOT NULL COMMENT 'timelog',
PRIMARY KEY (id)
);
Я обновил свой ответ, проверьте это, а пока я буду искать эту функцию now ()
Спасибо! Однако я обнаружил, что [42000-196] означает, что файл поврежден. И теперь он отлично работает. Решение, которое я нашел, описано в моем ответе. Благодарю за вашу быструю и преданную помощь :)
Я получил ответ от проблема с github, как показано ниже. Я удалил и регенерировал файл схемы sql, и теперь он работает без каких-либо изменений sql. Sql был автоматически сгенерирован в инструменте ERD в облаке, как SaaS, и загружен через Интернет. Думаю, файл был каким-то образом поврежден.
Спасибо @katzyn на github и Акаш Верма на stackoverflow здесь за их помощь :)
Your SQL statement incorrectly contains byte order mark (special Unicode character U+FEFF). This character may be used only as a first character in a text file written in some of Unicode encodings to distinguish between them. But this character should not be used in strings with SQL statements passed to JDBC methods.
Script tool provided with H2 reads such files correctly.
You are using some tool from Spring instead, so either this tool does not skip BOM mark correctly or your text file is damaged somehow (contains more than one BOM, for example).
Я только что пробовал без
DEFAULT now(), но он не работает с тем же кодом ошибки [42000-196]. В любом случае спасибо за совет :)