4

我已经用 Jooq 从本地 HSQLDB (DBMS) 生成了 API。并且测试运行正常。但是当我尝试使用另一个 DBMS(如 MySQL)运行测试时出现异常。另外,我已经看到 MySQL 生成的 API 属性是区分大小写的,而 HSQLDB 不是。

我的问题:是否可以使用 HSQLDB 使用 Jooq local 进行开发并使用 Oracle 或 MySQL 运行实时系统?

4

1 回答 1

4

可以将 jOOQ 与多个数据库一起使用。我所知道的jOOQ 用户组中最“大胆”的用户将 jOOQ 与至少五个不同的(高效的!)数据库系统(其中:Oracle、SQL Server、Sybase)一起使用。

但请注意,jOOQ 只会在一定程度上抽象您的数据库。一旦您使用供应商特定的功能,您可能会遇到问题。jOOQ 不保证所有呈现的 SQL 都适用于您的所有数据库。它只会简化标准化任务。

由于您尝试将 HSQLDB 和 Oracle 结合起来,因此有问题的功能包括(以及许多其他功能):

  • DATEOracle对数据类型的不同实现
  • Oracle 的分析功能
  • Oracle的劣质VARCHAR/VARCHAR2数据类型
  • Oracle 的扩展FOR UPDATE语法
  • Oracle 的扩展MERGE语法
  • Oracle 的强类型命名数组类型——与 HSQLDB 的数组类型相反
  • Oracle 缺少显式INTEGER数据类型(尤其是存储过程)
  • Oracle 对包和 UDT 的支持
  • Oracle 缺乏对空字符串的支持(''NULL都一样)
  • Oracle 的分区外连接
  • Oracle 的PIVOT/UNPIVOT子句

当然,当 jOOQ 不明确支持某个功能时,不兼容也仍然存在。其中包括(除其他外):

  • 甲骨文的 AQ
  • 甲骨文的MODEL条款

还有,你自己负责

  • 在所有数据库中维护等效的元数据(如果有疑问,请使用区分大小写的表/列名,即通过编写CREATE TABLE "MY_TABLE"...(Oracle、HSQLDB)或CREATE TABLE `MY_TABLE`...(MySQL)
  • 在所有数据库中维护等效的数据类型和数据

另一方面,您可以安全地使用 jOOQ 和 jOOQ 的 SQL 抽象功能

  • 大多数功能
  • 大多数 SQL 子句,包括复杂的嵌套 SQL

有关更多信息,请考虑org.jooq.SupportJavadoc。此注解用于所有 API 元素,以记录 jOOQ 是否能够模拟相关方言中的底层 SQL 子句/函数。

除此之外,如果您唯一的问题是表名区分大小写,请考虑通过 jOOQ 的设置告诉 jOOQ 不要引用名称:http: //www.jooq.org/doc/3.0/manual/sql-building/executor/自定义设置/

一个例子:

// This DSLContext will not render quoted table / column names:
Settings settings = new Settings().withRenderNameStyle(RenderNameStyle.AS_IS);
DSLContext create = DSL.using(connection, dialect, settings);
于 2013-03-19T20:56:25.083 回答