具有SQL Server支持的Java内存数据库

5
哪个内存数据库支持 SQL Server 特定功能最好?
我尝试使用 H2,但是遇到了问题,例如转义列名:在我们所有的 SQL 查询中,我们使用(非标准的)[FIELDNAME] 而不是 "FIELDNAME"。显然,H2 不支持这种方式。可能还有其他非标准特性可用,因此我想知道是否有任何人知道一个针对与 SQL Server 兼容性的特定数据库。
为了将其放入上下文中,我正在使用 Maven 和 maven-sql-plugin 在运行测试之前创建数据库。
我一直在看:
- H2 - HSQL - Derby
但无法确定哪一个对 SQL Server 有最好的支持,或者是否还有其他选择。

为什么不在SQL Server开发数据库上运行测试呢?我在几个项目中使用了这种策略(虽然是针对Oracle和PostgreSQL),效果总是很好的。你可以节省创建内存数据库+基础数据加载的启动成本,并避免所有的数据库兼容性问题。 - Rogério
1
@Rogério:我想要能够在Jenkins上自动运行测试,并且可以100%确定没有其他人在同时针对相同的数据库运行测试,可能会修改数据。你现在建议的方法是我们实际上正在使用的方法,我想改进它。 - Nicola Ambrosetti
你的测试不应该提交任何数据库事务。这样,它们将始终彼此隔离地运行,正如必须的那样。 - Rogério
除非我们谈论的是需要提交事务的功能/网络/UI测试。在这种情况下,共享数据库肯定不是一个选项。这就是我避免这些测试的原因之一(其他原因包括它们太慢了,比仅回滚的集成测试更脆弱)。 - Rogério
1个回答

11

我发现H2实际上有不同的兼容模式,可以在连接字符串中设置。例如:

jdbc:h2:~/test;MODE=MSSQLServer

这似乎解决了我的特定问题,让列名转义生效。

为了以后参考,可以查看兼容性模式文档以查看哪些功能受支持并适用于哪些数据库。

然而,一些 SQL Server 函数,如 SYSDATETIME(),是不受支持的。


顺便提一下:CURRENT_TIMESTAMP可以作为SYSDATETIME()的替代品(不需要括号)。它似乎在H2和MSSQL中都有实现。 - Anthony Raymond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接