gpt4 book ai didi

java - 有没有办法在事先不知道列名的情况下动态生成JOOQ sql语句?

转载 作者:行者123 更新时间:2023-11-29 04:22:30 25 4
gpt4 key购买 nike

我正在尝试组装一个 SQL 生成器,这样我就可以动态构建 SQL 语句,并将它们传递到 Spark Job Server。当表格列事先已知时,这似乎很容易(使用 JOOQ):

String sql = DSL.select(field("field-1"), field("field-2"), field("field-3"))
.from(table("myTable"))

但是,这里的目标是能够解析传入的 HTTP POST,从中获取 JSON 模式,并根据 JSON 中描述的表结构生成 SQL 选择语句。

...

List<String> fieldNames = new ArrayList<>();
fieldNames.add("field-1");
fieldNames.add("field-2");
fieldNames.add("field-3");

...

JOOQ“字段”似乎是一个强类型对象。

有没有办法使用这种动态构造的列列表来构建这样的 JOOQ select 语句?

最佳答案

您使用 jOOQ 构建的每个查询都是一个 dynamic SQL query .例如,在您的第一个示例中:

DSL.select(field("field-1"), field("field-2"), field("field-3"))
.from(table("myTable"))

你到底做了什么?你打给了 DSL.select(SelectField, SelectField, SelectField) ,这是 DSL.select(SelectField...) 的便利重载,你也可以这样调用它:

SelectField[] fields = {
field("field-1"),
field("field-2"),
field("field-3")
};
DSL.select(fields)
.from(table("myTable"))

或者像这样,调用 DSL.select(Collection<? extends SelectField<?>>) :

DSL.select(Arrays.asList(fields))
.from(table("myTable"));

永远记住,即使普通的 jOOQ 查询感觉像静态 SQL,它们实际上是动态 SQL 查询,并且您始终可以将不同的 jOOQ 查询部分分配给局部变量,或从方法中检索它们。

这在用于更函数式的编程范式中时特别有用:

https://blog.jooq.org/2017/01/16/a-functional-programming-approach-to-dynamic-sql-with-jooq/

关于java - 有没有办法在事先不知道列名的情况下动态生成JOOQ sql语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com