Java HSQLDB能否替代MSSQL用于测试环境

Java HSQLDB能否替代MSSQL用于测试环境,java,sql-server,junit,hsqldb,dbunit,Java,Sql Server,Junit,Hsqldb,Dbunit,我在测试环境中使用HSQLDB,提供脚本来创建表,然后导入要插入模拟数据库中的测试数据。在生产级别,我们有Microsoft SQL server数据库。HSQLDB仍然会给我以下错误: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: GETDATE 20:17:48,283 ERROR [Appeal] [proceessAppeal] [Error] at org.hsqldb.

我在测试环境中使用HSQLDB,提供脚本来创建表,然后导入要插入模拟数据库中的测试数据。在生产级别,我们有Microsoft SQL server数据库。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)
java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:GETDATE
20:17:48283错误【上诉】【程序表】【错误】
位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源)
位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源)
位于org.hsqldb.jdbc.JDBCPreparedStatement。(来源未知)
位于org.hsqldb.jdbc.JDBCConnection.prepareStatement(未知源)

不同的数据库支持不同的内置功能。hsqldb没有GETDATE()函数。它确实有一个等价的函数,但不能在它们之间重复使用相同的SQL代码


如果要执行此操作,您需要维护两个版本的架构/查询,或者(如果它足够简单,取决于您使用的内容),只需执行查找和替换。

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


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

请提供更多信息。SQL不仅仅是SQL,各种RDBMS都有不同的方言。如果您使用的是Hibernate之类的工具,您还应该在测试和生产模式之间交换方言。实际上,我们只是在DAO中使用查询语法,使用准备好的语句。是的,它非常简单,如创建函数GETDATE()返回时间戳(3)返回本地时间戳(3);