可以在替换MSSQL的测试环境中使用HSQLDB

时间:2013-08-26 17:43:30

标签: java sql-server junit hsqldb dbunit

我在测试环境中使用HSQLDB,提供脚本来创建表,然后导入要插入到模拟数据库中的测试数据。在生产级别,我们有Microsoft SQL服务器数据库。 HSQLDB仍然给我错误:

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: GETDATE
20:17:48,283 ERROR [Appeal] [proceessAppeal] [Error] 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)

2 个答案:

答案 0 :(得分:1)

不同的数据库支持不同的内置函数。 hsqldb没有GETDATE()函数like in mssql。它确实有一个等效函数CURRENT_TIMESTAMP(),但你不能在它们之间重用相同的SQL代码。

如果你想这样做,你将需要维护2个版本的架构/查询,或者(如果它很简单,取决于你使用的是什么)只需要进行查找和替换。

答案 1 :(得分:0)

也许您可以编写自定义函数getDATE(),请参阅this question

我在集成测试中使用hsqldb,在生产中使用oracle。尽管hsqldb具有“SET DATABASE SQL SYNTAX ORA true”功能,但仍然不支持某些SQL。因此,我尽量避免使用不标准的sql函数,只使用HSQLDB进行一些插入/更新/查询测试(因此不需要一些SQL脚本)。