Как использовать HSQLDB в режиме синтаксиса запросов Oracle? - PullRequest
15 голосов
/ 02 января 2011

Я пытаюсь использовать HSQLDB в качестве встроенной базы данных в весеннем приложении (для тестирования). Поскольку целевой производственной базой данных является Oracle, я хотел бы использовать функцию синтаксического режима 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, этот сценарий на самом деле должен быть очень распространенным. Однако в Интернете я не нашел ничего, даже касаясь этой проблемы.

Обновление:

Проблема, описанная выше, решена благодаря ответу № 1.

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

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

Есть идеи, чем это вызвано?

Ответы [ 3 ]

12 голосов
/ 02 января 2011

Эта опция была введена в HSQLDB 2.0.

Вы уверены, что используете правильную версию?Может быть, у вас есть 1,8 все еще в classpath где-то.

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

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

9 голосов
/ 12 мая 2014

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

<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>
2 голосов
/ 16 ноября 2016

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

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

...