【问题标题】:Oracle to H2/hsqldb etc adapterOracle 到 H2/hsqldb 等适配器
【发布时间】:2012-08-19 04:08:46
【问题描述】:

我不可能是唯一遇到此问题的人,所以我正在寻找建议。

我们在 Oracle 上运行我们的应用程序,但我们的集成测试使用 h2 进行快速内存测试,该数据库在测试开始时使用 DDL 脚本构建。

问题在于 Oracle 和 h2/hsqldb 之间某些 DDL 命令的使用/语法不同。例如,今天我花了一些时间才意识到“grant select on ...”适用于 Oracle 中的序列,但仅适用于 h2 中的表。

在之前的项目中,我们有一个适配器来删除/翻译此类错误命令,这意味着我们的测试数据库运行的代码与我们在 prod 中实现的代码完全不同。虽然一切都经过了非常彻底的验收测试,但这意味着某些问题可能要到开发周期的后期才能发现。

在我的最新项目中,我感觉我正在走同样的路 - 所以肯定其他人也曾走过它。

有什么建议吗?我们正在使用 java/maven,所以欢迎提供合适的解决方案!

【问题讨论】:

  • 您有没有机会引入 ORM(如 Hibernate)来抽象出这些差异?我们在测试阶段也有类似的 Oracle 设置和单元测试阶段的 HSQLDB 设置,并且 ORM 到目前为止运行良好。
  • 这是对“集成测试”这个术语的使用,迄今为止我并不熟悉。以我的经验,集成测试是您在一个环境中测试新软件的点,该环境尽可能地反映生产目标。 IMO 使用完全不同的数据库“进行快速内存测试”是不经济的。
  • @BobJarvis - 我将测试称为集成测试,因为我们中间的纯粹主义者(我不是我可能会添加的人)不喜欢将这些称为单元测试。同样,在构建周期中快速运行并运行数据库的小规模测试非常有用 - 如果 Oracle 有一个便宜/免费的内存数据库,我会使用它,但他们没有,所以这就是我们的路径拿。完整的集成测试(我们称之为系统集成)当然会使用生产目标数据库。
  • @DaveRlz 为什么不直接安装 Oracle XE 并将其挂载到 ramfs 分区上?这将是您从 Oracle 获得的最接近免费内存数据库的方式。

标签: java sql oracle maven h2


【解决方案1】:

据我所知,没有这样的适配器。

无论如何,我会说您不会使用这样的适配器实现您的目标。一方面,Oracle 的功能集在任何其他解决方案中都不容易找到(这对 Oracle 来说并不一定是优势)。

【讨论】:

  • 我同意这些功能没有可比性,我没有提到的是我不关心任何“高级”功能(即存储过程、数据库链接、有趣的表结构等),而只是比较常见的东西表定义/约束/索引、数据类型、权限等
  • @DaveRlz 我认为你最好的选择是为此找到一个抽象。例如,对于 DDL,您可以使用 Liquibase 创建独立于 DB 的 DDL 语句。或者 Hibernate 作为 ORM。
猜你喜欢
  • 2013-05-23
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 2012-09-30
相关资源
最近更新 更多