首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以在不预先知道列名的情况下动态生成JOOQ语句?

是否有一种方法可以在不预先知道列名的情况下动态生成JOOQ语句?
EN

Stack Overflow用户
提问于 2018-01-12 03:57:26
回答 1查看 1.6K关注 0票数 2

我试图将SQL生成器组合在一起,以便动态构建SQL语句,并将它们传递到Server。当预先知道表列时,似乎很容易(使用JOOQ):

代码语言:javascript
复制
String sql = DSL.select(field("field-1"), field("field-2"), field("field-3"))
        .from(table("myTable"))

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

..。

代码语言:javascript
复制
List<String> fieldNames = new ArrayList<>();
fieldNames.add("field-1");
fieldNames.add("field-2");
fieldNames.add("field-3");

..。

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

是否有一种方法可以使用这种动态构造的列列表来构建这样的JOOQ语句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-13 13:03:25

使用jOOQ构建的每个查询都是一个动态SQL查询。例如,在第一个示例中:

代码语言:javascript
复制
DSL.select(field("field-1"), field("field-2"), field("field-3"))
   .from(table("myTable"))

你到底做了什么?您调用了DSL.select(SelectField, SelectField, SelectField),这是DSL.select(SelectField...)的一个方便重载,您可以这样调用它:

代码语言:javascript
复制
SelectField[] fields = {
    field("field-1"), 
    field("field-2"), 
    field("field-3")
};
DSL.select(fields)
   .from(table("myTable"))

或者像这样打电话给DSL.select(Collection>)

代码语言:javascript
复制
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/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48219317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档