代码之家  ›  专栏  ›  技术社区  ›  jjangga

H2组织。h2。jdbc。具有正确DDL sql的JdbcSQLException:错误代码=[42000-196]

  •  3
  • jjangga  · 技术社区  · 6 年前

    在执行下面的ddl时, org.h2.jdbc.JdbcSQLException 被抛出。当然,我在隔离的环境中测试了它,没有任何其他sql。更令人尴尬的是,错误消息没有提供任何提示,除了 [42000-196] 。我已经检查了一些与此sql相关的h2特定语法 official website ,但有没有我错过的特殊语法?

    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
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   akash verma    6 年前

    我认为错误在这一行:

    `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)
    );
    
        2
  •  0
  •   jjangga    6 年前

    我从 github issue 如下所示。 我删除并重新生成了schema sql文件,现在它可以在没有任何sql更改的情况下工作。sql是在云上的ERD工具(即SaaS)上自动生成的,并通过互联网下载。我想文件有点损坏了。

    幸亏 @katzyn 在github,以及 akash verma 关于stackoverflow,请在此寻求帮助:)

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

    H2附带的脚本工具可以正确读取此类文件。

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