2017-12-14 44 views
0

DAO 객체를 테스트하기 위해 메모리 내장 데이터베이스를 작성하려고합니다.H2 데이터베이스가 CREATE SEQUENCE에서 예기치 않은 JdbcSQLException을 발생시킵니다.

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라는 파일에이 명령을 실행하려고 :

지금까지 내가 확인으로 ( here, 예를 들어)
CREATE SEQUENCE CE0AOFQ AS BIGINT START WITH 1 INCREMENT BY 1; 

,이 쿼리가 올 것 같다 나는 다음과 같은 스택 추적을 얻을.

이것이 작동하지 않는 이유는 무엇입니까?

+0

해당 링크는 SQL Server 용이지만 ... h2를 사용하고 있습니다. 대신 [이] (http://www.h2database.com/html/grammar.html#create_sequence) 설명서를보십시오 –

+0

나는 그들이 거의 같은 구문을 사용할 것이라고 추측 했습니까? 테이블 생성 및 삽입은 완벽하게 작동합니다. –

+0

항상 약간의 차이가 있습니다. SQL 서버 문서가 아닌 h2 문서를 사용하는 것이 가장 좋습니다 –

답변

1

h2에서 시퀀스의 데이터 유형을 지정할 수 없습니다. 항상 BIGINT입니다.

사용 : H2의, 데이타베이스의 구문 (나 같은) 어려움을 겪고있는 사람들을위한

CREATE SEQUENCE CE0AOFQ START WITH 1 INCREMENT BY 1; 
+0

그냥 랜스 - 자바 덕분에 내 자신에게 대답했다. 감사 ! –

0

, lance-java의 조언에 따라 실제 H2 grammar documentation를 참조하십시오. 좋은 조언을 찾을 수 있습니다. 예를 들면 다음과 같습니다.

새 시퀀스를 만듭니다. 시 v 스의 데이터 유형은 BIGINT입니다. 사용 된 값은 트랜잭션이 롤백 되더라도 재사용되지 않습니다.

이는 변경할 수 없음을 의미합니다.