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

时间:2011-01-02 15:37:53

标签: hsqldb

我正在尝试将HSQLDB用作spring应用程序中的嵌入式数据库(用于测试)。由于目标生产数据库是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>

在顶部的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

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

3 个答案:

答案 0 :(得分:12)

此选项随HSQLDB 2.0一起引入。

您确定使用的是正确的版本吗? 也许你有1.8仍然在类路径的某个地方。

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

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

答案 1 :(得分: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>

答案 2 :(得分:2)

sql.syntax_ora=true网址属性支持语法兼容性,包括NUMBER类型和DUAL表。其他属性可用于更多行为兼容性。这些内容记录在HSQLDB指南中:

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