2011-01-02 14 views
14

Próbuję użyć HSQLDB jako wbudowanej bazy danych w aplikacji wiosną (do testowania). Ponieważ docelową produkcyjną bazą danych jest Oracle, chciałbym skorzystać z funkcji trybu składni Oracle HSQLDBs.Jak korzystać z HSQLDB w trybie składni zapytania Oracle?

Wiosną config używam

<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> 

aw schema.sql na górze pisałem:

SET DATABASE SQL SYNTAX ORA TRUE;

Jednak, gdy uruchomiony mój test, pojawia się następujący błąd:

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

Czy jest to błąd składniowy, błąd uprawnień lub coś zupełnie innego?

Dzięki - również za wszelkie wskazówki, które mogą prowadzić do odpowiedzi.

Biorąc pod uwagę, że HSQL jest domyślną wiosną dla jdbc: wbudowana baza danych i biorąc pod uwagę cel Oracle, scenariusz ten powinien być bardzo powszechny. Jednak nie znalazłem niczego w sieci, nawet dotykając problemu.

Aktualizacja:

Problem został rozwiązany dzięki powyżej odpowiedzieć na # 1.

Jednak teraz dostać inny wyjątek:

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

Każdy pomysł co to jest spowodowane?

+0

Czy kiedykolwiek znaleźć rozwiązanie błędu StatementCommand? Jestem teraz w tej samej łodzi. –

+0

Dlaczego zamiast tego używać H2 db z trybem zgodności Oracle? – ebaxt

Odpowiedz

10

Ta opcja została wprowadzona w HSQLDB 2.0.

Czy jesteś pewien, że używasz poprawnej wersji?
Może masz jeszcze 1.8 miejsca w ścieżce klasu.

Ale to nie zaowocuje tak daleko w testowaniu, ponieważ to tylko włącza podstawową "zmianę" składni, nie ma tu żadnej rzeczywistej zmiany zachowania (i nawet nie mówię o bardziej zaawansowanej Oracle funkcje takie jak funkcje analityczne, CONNECT BY lub coś podobnego).

Bardzo rzadko dobrym pomysłem jest przetestowanie aplikacji za pomocą DBMS, który nie będzie używany w produkcji. To po prostu nie jest ważny test.

+0

Ah, dzięki. Tak - byłem na poziomie 1.7. Zgadzam się z Państwem na testowanie - jednak w moim przypadku jest to bardzo niewielkie wykorzystanie DB. –

+2

2.0 nie działa dla mnie, musiałem użyć nowszej wersji, (2.2.8) – banterCZ

+0

2.2.4 też nie działało dla mnie (+1 do banterCZ, dzięki!) Zmieniłem również 2.2.8 ... było to albo upgrade albo http://stackoverflow.com/questions/4628857/junit-hsqldb-how -to-get-around-errors-with-oracle-syntax-when-testing-using-hsq dodanie = sql.syntax_ora = true do adresu URL –

7

Nawet jeśli to tylko zmienić niektóre podstawowe składnię Oto przykład tego, jak można to zrobić:

<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> 
+1

Powinien to być jdbc: hsqldb: mem: PUBLIC: sql.syntax_ora = true. – mrembisz

+0

Zaktualizowano. Dzięki – borjab

+0

@borjab Wciąż jesteście różni, czy używać przecinka czy średnika –

Powiązane problemy