在执行下面的ddl时,抛出了org.h2.jdbc.JdbcSQLException
。当然我是在隔离环境下测试的,没有任何其他的sql。更尴尬的是,错误消息除了[42000-196]外没有提供任何提示。我已经在 official website 上检查了一些与此 sql 相关的特定于 h2 的语法, 但是我错过了特殊的语法吗?
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)
);
关于java - H2 org.h2.jdbc.JdbcSQLException 与正确的 DDL sql : error code = [42000-196],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49714725/