Как использовать HSQLDB в режиме синтаксиса запросов Oracle?

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

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

<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: Неожиданный токен: инструкция DATABASE в [SET DATABASE SQL SYNTAX ORA TRUE]

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

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

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

Update:

Вышеупомянутая проблема решена благодаря ответу # 1.

Однако теперь я получаю другое исключение:

org.springframework.dao.DataAccessResourceFailureException: не удалось заполнить базу данных; Вложенное исключение: java.sql.SQLException: java.lang.RuntimeException: неподдерживаемая внутренняя операция: неподдерживаемая внутренняя операция StatementCommand: StatementCommand

Любая идея, что это вызвано?

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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