我已从本地HSQLDB(DBMS)使用Jooq生成API。测试运行正常。 但是当我尝试使用像MySQL这样的另一个DBMS运行测试时,我会遇到异常。 另外,我已经看到MySQL生成的API属性区分大小写,而HSQLDB则没有。
我的问题:是否有可能与Joooq本地开发HSQLDB并使用Oracle或MySQL运行实时系统?
答案 0 :(得分:4)
可以将jOOQ与多个数据库一起使用。我jOOQ User Group使用jOOQ认识的最“大胆”的用户使用至少五个不同的(高效!)数据库系统(其中包括:Oracle,SQL Server,Sybase)。
但请注意,jOOQ只会在一定程度上抽象您的数据库。只要您使用特定于供应商的功能,就可能会遇到问题。 jOOQ不会保证,所有呈现的SQL都可以在您的所有数据库上运行。它只是简化标准化任务。
由于您正在尝试将HSQLDB与Oracle结合使用,因此存在问题的功能(包括许多其他功能):
DATE
数据类型VARCHAR
/ VARCHAR2
数据类型FOR UPDATE
语法MERGE
语法INTEGER
数据类型(特别是对于存储过程)''
和NULL
是相同的)PIVOT
/ UNPIVOT
条款当然,当jOOQ不明确支持某项功能时,也会出现不兼容问题。这些包括(以及其他许多):
MODEL
子句此外,您自己负责
CREATE TABLE "MY_TABLE"...
(Oracle,HSQLDB)或CREATE TABLE `MY_TABLE`...
(MySQL)另一方面,您可以安全地使用jOOQ和jOOQ的SQL抽象功能
有关详细信息,请考虑org.jooq.Support
Javadoc。此注释用于所有API元素,以记录jOOQ是否能够模拟相关方言中的基础SQL子句/函数。
除此之外,如果您唯一的问题是表名的区分大小写,请考虑告诉jOOQ不要通过jOOQ的设置引用名称: http://www.jooq.org/doc/3.0/manual/sql-building/executor/custom-settings/
一个例子:
// This DSLContext will not render quoted table / column names:
Settings settings = new Settings().withRenderNameStyle(RenderNameStyle.AS_IS);
DSLContext create = DSL.using(connection, dialect, settings);