从我的春季启动应用程序中,我试图使用plain sql使用JOOQ 3.2.5(免费版)调用DB2 UDF:
@Autowired
private DSLContext context;
@Override
public List<DataItemEntity> find(int ident, int itemNumber, LocalDate date) {
return context.//
select() .//
from("Table(db2schema.db2udfname("
+ ident + ", "
+ itemNumber + ", "
+ LastChangeDateUtil.retrieveActualDateAtUtc().toLocalDate()
+ ") with ur;"
).//
fetchInto(ItemEntity.class);
}
MavenBuild成功并且应用程序启动,但是一旦我称查找功能在上方,就会有一个例外:
[2025-02-21 13:48:14,749] [warn] [main] [none] [o.j.i.d.logdefaultDialect]
:使用不支持的方言执行查询时会抛出一个例外:sqldialect.default.
thanks用于输入 我希望从该DB2UDF
收到带有多个记录的结果集
您忘记了围绕您
table(db2schema.db2udfname(..))
功能调用的闭合括号。另外,您将值串联到字符串会导致其他语法错误和SQL注入漏洞!
尽管如此,像这样的琐碎查询可能在没有正式方言支持的情况下可以工作,但您会迅速遇到JOOQ Enterprise Edition可以帮助您进行DB2 Integration
请避免与Jooq
串联串联。使用像Jooq这样的查询构建器的主要好处是,您永远不必这样做。即使您使用
from("table(db2schema.db2udfname(?, ?, ?))",
ident,
itemNumber,
LastChangeDateUtil.retrieveActualDateAtUtc().toLocalDate()
)
这样的副作用是您可能不会遇到语法错误。