我试图在Spring应用程序中使用HSQLDB作为嵌入式数据库(用于测试).由于目标生产数据库是Oracle,我想使用HSQLDBs Oracle语法模式功能.
在我使用的Spring配置中
Run Code Online (Sandbox Code Playgroud)<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
知道这是由什么引起的吗?
a_h*_*ame 12
HSQLDB 2.0引入了此选项.
您确定使用的是正确的版本吗?
也许你还有1.8级仍然在类路径中.
但是这无论如何都不会让你在测试方面走得太远,因为这只会打开一些基本的语法"替换",这里没有真正的行为改变(我甚至不谈论更高级的Oracle功能,如分析函数) ,CONNECT BY或类似的东西).
使用不会在生产中使用的DBMS测试应用程序是一个不错的主意.这根本不是一个有效的测试.
即使它只改变了一些基本语法,也是一个如何做到这一点的例子:
<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)
| 归档时间: |
|
| 查看次数: |
29062 次 |
| 最近记录: |