我正在尝试编写内存数据库以测试我的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),此查询似乎是正确的。
知道为什么这不起作用吗?
答案 0 :(得分:1)
您无法在h2中指定序列的数据类型。它总是BIGINT。
使用:
CREATE SEQUENCE CE0AOFQ START WITH 1 INCREMENT BY 1;
答案 1 :(得分:0)
对于任何使用H2数据库语法挣扎的人(比如我),请按照lance-java的建议阅读实际的H2 grammar documentation。您可能会找到好的建议,例如:
创建一个新序列。序列的数据类型是BIGINT。即使事务被回滚,也不会重复使用使用的值。
这意味着你无法改变它。