支持SQL Server的Java内存数据库

支持SQL Server的Java内存数据库,java,sql-server,maven,integration-testing,in-memory-database,Java,Sql Server,Maven,Integration Testing,In Memory Database,哪些可用内存中数据库对SQL Server特定功能的支持最好 我一直在尝试H2,但在转义列名方面遇到了问题:在所有sql查询中,我们都使用(非标准)[FIELDNAME]而不是“FIELDNAME”。H2显然不支持这一点。可能还会使用其他非标准功能,因此我想知道是否有人知道某个特定的数据库以与SQL Server兼容为目标 为了将其放到上下文中,我使用maven和maven sql插件在运行测试之前创建数据库 我一直在看 氢 HSQL 德比 但无法确定哪一个对SQL Server的支持最好,

哪些可用内存中数据库对SQL Server特定功能的支持最好

我一直在尝试H2,但在转义列名方面遇到了问题:在所有sql查询中,我们都使用(非标准)[FIELDNAME]而不是“FIELDNAME”。H2显然不支持这一点。可能还会使用其他非标准功能,因此我想知道是否有人知道某个特定的数据库以与SQL Server兼容为目标

为了将其放到上下文中,我使用maven和maven sql插件在运行测试之前创建数据库

我一直在看

  • HSQL
  • 德比

但无法确定哪一个对SQL Server的支持最好,或者是否还有其他支持。

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

jdbc:h2:~/test;MODE=MSSQLServer
这似乎解决了我关于转义列名的具体问题

作为将来的参考,您可以查看以了解哪些数据库支持哪些功能


但是,某些SQL Server函数(如SYSDATETIME()不受支持。为什么不在SQL Server开发数据库上运行测试?我已经在几个项目中使用了这个策略(尽管使用了Oracle和PostgreSQL),而且一直都很有效。您可以节省创建内存中数据库+基本数据加载的启动成本,并避免所有数据库兼容性问题。@Rogério:我希望能够在Jenkins上自动运行测试,并100%确保没有其他人在同一时间运行同一数据库并可能修改数据。您所建议的是我们现在实际上是如何做的,我想对此进行改进。您的测试永远不应该向数据库提交事务。这样,它们将始终彼此隔离运行,这是必须的。。。。除非我们讨论的是需要提交事务的功能/web/UI测试。在这种情况下,当然,共享数据库不是一个选项。这是我避免此类测试的原因之一(其他原因是它们比仅回滚的集成测试速度太慢且更脆弱)。作为旁注:
CURRENT\u TIMESTAMP
可以用作
SYSDATETIME()
(不带括号)的替代品。它似乎在H2和MSSQL中都实现了。