2011-01-02 2 views
14

Я пытаюсь использовать HSQLDB в качестве встроенной базы данных в приложении весны (для тестирования). Поскольку целевой производственной базой данных является Oracle, я хотел бы использовать функцию синтаксиса режима HSQLDBs Oracle.Как использовать HSQLDB в режиме синтаксиса запросов Oracle?

В весенней конфигурации я использую

<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 в верхней части я писал:

SET DATABASE SQL SYNTAX ORA TRUE;

Однако, при запуске моего теста, я получаю следующее сообщение об ошибке:

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

Является ли это синтаксической ошибкой или ошибкой разрешений или чем-то совершенно другим?

Спасибо - также за любые указатели, которые могут привести к ответу.

Учитывая, что HSQL является значением по умолчанию для jdbc: встроенной базы данных и заданной целью является Oracle, этот сценарий должен быть очень распространенным. Тем не менее, я ничего не нашел в Сети, даже затронув проблему.

Update:

Вопрос выше решается благодаря ответить # 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, а с режимом совместимости с oracle? – ebaxt

ответ

10

Этот параметр был введен с HSQLDB 2.0.

Вы уверены, что используете правильную версию?
Возможно, у вас еще есть 1.8 в пути к классам.

Но это не повлияет на вас с точки зрения тестирования в любом случае, потому что это приводит к включению базового синтаксиса «замена», здесь нет реального изменения поведения (и я даже не говорю о более продвинутом Oracle такие как аналитические функции, CONNECT BY или что-то подобное).

Настоятельно рекомендуется протестировать ваше приложение с помощью СУБД, которая не будет использоваться в производстве. Это просто недействительный тест.

+0

А, спасибо. Да, я был в 1,7. Я согласен с вами в тестировании - однако в моем случае это просто очень незначительное использование БД. –

+2

2.0 не работает для меня, мне пришлось использовать более новую версию, (2.2.8) – banterCZ

+0

2.2.4 тоже не работал для меня (+1 к banterCZ, спасибо!) Я тоже повысился до 2.2.8 ... это было либо обновление, либо http://stackoverflow.com/questions/4628857/junit-hsqldb-how -to-get-around-errors-with-oracle-syntax-when-testing-using-hsq добавляет: sql.syntax_ora = true к URL-адресу –

7

Даже если изменить только некоторые основной синтаксис здесь является примером того, как можно это сделать:

<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

Должно быть jdbc: hsqldb: mem: PUBLIC: sql.syntax_ora = true. – mrembisz

+0

Обновлено. Спасибо – borjab

+0

@borjab Вы, ребята, все еще отличаетесь тем, использовать ли запятую или точку с запятой –

0

Свойство sql.syntax_ora=true URL обеспечивает совместимость синтаксиса, в том числе типа NUMBER и DUAL таблицы. Дополнительные свойства могут использоваться для большей совместимости с поведением. Они описаны в Руководстве HSQLDB:

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

Смежные вопросы