如何在Oracle查询语法模式下使用HSQLDB?

Jan*_*sen 15 hsqldb

我试图在Spring应用程序中使用HSQLDB作为嵌入式数据库(用于测试).由于目标生产数据库是Oracle,我想使用HSQLDBs Oracle语法模式功能.

在我使用的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>
Run Code Online (Sandbox Code Playgroud)

在顶部的schema.sql中,我写道:

SET DATABASE SQL SYNTAX ORA TRUE;

但是,在运行我的测试时,我收到以下错误:

java.sql.SQLException:意外的标记:语句中的DATABASE [SET DATABASE SQL SYNTAX ORA TRUE]

这是语法错误还是权限错误或完全不同的东西?

谢谢 - 也可以提供任何可能导致答案的指针.

鉴于HSQL是jdbc:embedded-database的Spring默认值,并且鉴于目标是Oracle,这种情况实际上应该是非常常见的.但是,我甚至没有在网上发现任何问题.

更新:

由于答案#1,上述问题得以解决.

但是,我现在得到另一个例外:

org.springframework.dao.DataAccessResourceFailureException:无法填充数据库; 嵌套异常是java.sql.SQLException:java.lang.RuntimeException:不支持的内部操作:StatementCommand不支持的内部操作:StatementCommand

知道这是由什么引起的吗?

a_h*_*ame 12

HSQLDB 2.0引入了此选项.

您确定使用的是正确的版本吗?
也许你还有1.8级仍然在类路径中.

但是这无论如何都不会让你在测试方面走得太远,因为这只会打开一些基本的语法"替换",这里没有真正的行为改变(我甚至不谈论更高级的Oracle功能,如分析函数) ,CONNECT BY或类似的东西).

使用不会在生产中使用的DBMS测试应用程序是一个不错的主意.这根本不是一个有效的测试.

  • @a_horse_with_no_name我认为对内存数据库运行单元测试是一个非常好的主意,它使用生产方言,因为它加快了测试速度.如果测试需要很长时间,开发人员就会跳过它们.当然,您还需要进行集成测试......理想情况下,只需在另一个构建阶段(例如每晚构建)中运行的相同测试的另一个配置. (4认同)
  • 2.0对我不起作用,我不得不使用更新的版本,(2.2.8) (2认同)

bor*_*jab 9

即使它只改变了一些基本语法,也是一个如何做到这一点的例子:

<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>
Run Code Online (Sandbox Code Playgroud)