有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java H2数据库在创建序列时引发意外的JdbcSQLException

为了测试我的DAO对象,我正在尝试编写一个内存中的数据库。我得到以下堆栈跟踪:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement " CREATE SEQUENCE CE0AOFQ AS[*] BIGINT START WITH 1 INCREMENT BY 1"; SQL statement:
 CREATE SEQUENCE CE0AOFQ AS BIGINT START WITH 1 INCREMENT BY 1 [42000-196]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.message.DbException.getSyntaxError(DbException.java:191)
    at org.h2.command.Parser.getSyntaxError(Parser.java:534)
    at org.h2.command.Parser.prepareCommand(Parser.java:261)
    at org.h2.engine.Session.prepareLocal(Session.java:578)
    at org.h2.engine.Session.prepareCommand(Session.java:519)
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204)
    at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:132)
    at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:121)
    at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.executeSqlScript(ResourceDatabasePopulator.java:169)

尝试将此命令执行到名为init.sql的文件中时:

CREATE SEQUENCE CE0AOFQ AS BIGINT START WITH 1 INCREMENT BY 1;

就我所检查的(here,例如),这个查询似乎是正确的

你知道为什么这样不行吗


共 (2) 个答案

  1. # 1 楼答案

    不能在h2中指定序列的数据类型。它总是很有趣

    使用:

    CREATE SEQUENCE CE0AOFQ START WITH 1 INCREMENT BY 1;
    
  2. # 2 楼答案

    对于任何(像我一样)在H2数据库语法方面遇到困难的人,请按照lance-java的建议阅读实际的H2 grammar documentation。您可能会找到好的建议,例如:

    Creates a new sequence. The data type of a sequence is BIGINT. Used values are never re-used, even when the transaction is rolled back.

    这意味着你不能改变它