2011-01-02 2 views
14

스프링 응용 프로그램 (테스트 용)에 내장 데이터베이스로 HSQLDB를 사용하려고합니다. 대상 프로덕션 데이터베이스가 오라클이기 때문에 Oracle 구문 모드 기능인 HSQLDB를 사용하고 싶습니다. 내 테스트를 실행할 때Oracle 쿼리 구문 모드에서 HSQLDB를 사용하는 방법은 무엇입니까?

SET DATABASE SQL SYNTAX ORA TRUE;

그러나, 나는 다음과 같은 오류가 발생합니다 : : 봄 설정에서

나는
<jdbc:embedded-database type="HSQL" id="dataSource"> 
</jdbc:embedded-database> 

<jdbc:initialize-database data-source="dataSource" enabled="true"> 
    <jdbc:script location="classpath:schema.sql"/> 
</jdbc:initialize-database> 

그리고 내가 쓴 상단에 schema.sql에서

를 사용

java.sql.SQLException: Unexpected token: DATABASE in statement [SET DATABASE SQL SYNTAX ORA TRUE]

구문 오류 또는 사용 권한 오류 또는 완전히 다른 것이 있습니까?

감사합니다. 답변을 이끌어 낼 수있는 포인터도 있습니다.

HSQL이 jdbc : embedded-database의 스프링 기본값이고 대상이 Oracle 인 경우,이 시나리오는 실제로 매우 일반적이어야합니다. 그러나 웹에서 문제를 만지는 것조차 발견하지 못했습니다.

업데이트 :

위의 문제는 답변 # 1 덕분에 해결되었습니다.

그러나, 지금 다른 예외를 얻을 :

org.springframework.dao.DataAccessResourceFailureException: Failed to populate database; nested exception is java.sql.SQLException: java.lang.RuntimeException: unsupported internal operation: StatementCommand unsupported internal operation: StatementCommand

이에 의해 발생 어떤 생각?

+0

당신은 이제까지 StatementCommand 오류에 대한 해결책을 찾았나요? 나는 지금 같은 배에있다. –

+0

오라클 호환 모드를 사용하는 대신 H2 db를 사용하지 않는 이유는 무엇입니까? – ebaxt

답변

10

이 옵션은 HSQLDB 2.0에서 도입되었습니다.

올바른 버전을 사용하고 있습니까?
아마도 어딘가에 클래스 패스에 1.8이 남아있을 수도 있습니다.

그러나 이것은 기본 구문을 "바꾸기"만하기 때문에 어쨌든 테스트 측면에서는별로 도움이되지 않을 것입니다. 실제 동작 변경은 여기에 포함되어 있지 않습니다. (또한 고급 Oracle 분석 기능, CONNECT BY 또는 이와 유사한 기능).

프로덕션 환경에서 사용되지 않는 DBMS를 사용하여 응용 프로그램을 테스트하는 것은 거의 불가능합니다. 그것은 단순히 유효한 시험이 아닙니다.

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:mem:PUBLIC;sql.syntax_ora=true" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 
+0

아, 고마워. 예 - 저는 1.7 세였습니다. 테스트에 동의합니다. 그러나 제 경우에는 DB를 사소한 용도로만 사용합니다. –

+2

2.0이 나를 위해 작동하지 않습니다. 2.2 버전의 새로운 버전을 사용해야했습니다. – banterCZ

+0

2.2.4는 나에게도 효과가 없었습니다 (+1 to banterCZ, 감사합니다!) 2.2.8로 업그레이드되었습니다 ... 업그레이드 또는 http://stackoverflow.com/questions/4628857/junit-hsqldb-how 중 하나였습니다. 테스트 할 때 -hsq를 사용하여 URL에 sql.syntax_ora = true를 추가하는 것입니다. –

7

는 당신이 그것을 할 수있는 방법의 예입니다. 더 많은 동작 호환성을 위해 추가 속성을 사용할 수 있습니다. 이들은 HSQLDB 가이드에 설명되어 있습니다 :

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_oracle

+1

jdbc : hsqldb : mem : PUBLIC : sql.syntax_ora = true 여야합니다. – mrembisz

+0

업데이트 됨. 감사합니다 – borjab

+0

@borjab 당신은 여전히 ​​쉼표 또는 세미콜론을 사용할지 여부가 다릅니다 –

0

sql.syntax_ora=true URL 속성은 번호 유형과 DUAL 테이블을 포함, 구문 호환성을 수 있습니다 : 그것은 단지 여기에 몇 가지 기본 구문을 변경하더라도

관련 문제