Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java H2 org.H2.jdbc.JdbcSQLException和正确的DDL sql:错误代码=[42000-196]_Java_Spring_Spring Boot_H2 - Fatal编程技术网

Java H2 org.H2.jdbc.JdbcSQLException和正确的DDL sql:错误代码=[42000-196]

Java H2 org.H2.jdbc.JdbcSQLException和正确的DDL sql:错误代码=[42000-196],java,spring,spring-boot,h2,Java,Spring,Spring Boot,H2,执行下面的ddl时,会抛出org.h2.jdbc.JdbcSQLException。当然,我在隔离环境中测试了它,没有任何其他sql。更令人尴尬的是,除了[42000-196]之外,错误消息没有提供任何提示。我已经检查了一些与此sql相关的h2特定语法,但是否有我遗漏的特殊语法 sql CREATE TABLE Product ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id', `title`

执行下面的ddl时,会抛出
org.h2.jdbc.JdbcSQLException
。当然,我在隔离环境中测试了它,没有任何其他sql。更令人尴尬的是,除了[42000-196]之外,错误消息没有提供任何提示。我已经检查了一些与此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',
-----已更新----

先试试这个,不带那个函数now(),我已经测试过这个了

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)
);
我得到了如下答案。 我删除并重新生成了模式sql文件,现在它可以在没有任何sql更改的情况下工作。sql是在云上的ERD工具(即SaaS)上自动生成的,并通过互联网下载。我猜文件不知怎么有点损坏了

感谢github和stackoverflow的帮助:)

SQL语句不正确地包含字节顺序标记(特殊 Unicode字符U+FEFF)。此字符只能用作第一个字符 文本文件中的字符,用某些Unicode编码写入 区分它们。但是这个字符不应该用在 带有传递给JDBC方法的SQL语句的字符串

H2提供的脚本工具可以正确读取此类文件

您使用的是Spring中的某个工具,因此该工具可以 没有正确跳过BOM表标记,或者您的文本文件被损坏 (例如,包含多个BOM表)


我刚刚尝试了一下,没有使用
DEFAULT now()
,但是失败了,错误代码相同[42000-196]。不管怎样,谢谢你的建议:)我已经更新了我的答案,检查这个,直到那时我会立即查找()谢谢!但是我发现[42000-196]表示文件已损坏。现在一切正常。我的答案中描述了我找到的解决方案。我感谢您迅速而专注的帮助:)