当前位置: 首页 > 知识库问答 >
问题:

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

沈实
2023-03-14

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

String sql = DSL.select(field("field-1"), field("field-2"), field("field-3"))
        .from(table("myTable"))
List<String> fieldNames = new ArrayList<>();
fieldNames.add("field-1");
fieldNames.add("field-2");
fieldNames.add("field-3");

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

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

共有1个答案

章岳
2023-03-14

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

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"));

这在函数性更强的编程范例中使用时特别有用:

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

 类似资料:
  • 问题内容: 我刚刚收到Java更新通知,说Update 17已经发布,所以我运行了更新,发现只有我的公共JRE被更新了。我仍然只有JDK的Update 16。 有没有办法自动提供最新的JDK? 当然,更新不应该放弃旧版本。这应该手动完成,因为Eclipse仍在使用旧版本。更新设置后,我将手动删除旧的JDK。 问题答案: 不在Windows上。如果要通过带有自动更新程序的Linux发行版来获取JDK

  • 问题内容: 关于将行旋转为各种数据库的列,有很多文章。他们似乎分为两个阵营,使用案例陈述或使用数据库供应商的内置功能。我正在使用 MySQL ,到目前为止,在任何内置函数上都找不到任何东西,这将使我能够选择任意数量的行值(我想将其转换为列)。如果我不提前知道这些值,则无法构建经常出现在的CASE查询。我想知道在MySQL中是否有类似于其他数据库中称为交叉表或数据透视表的东西: -Postgresq

  • 问题内容: 我想构建一个PHP脚本来验证SQL查询,但不执行它。它不仅应验证语法,而且还应在可能的情况下让您知道是否可以通过查询中的命令来执行查询。这是我想要执行的操作的伪代码: 这样的事情。我希望它模拟查询而不执行它。那就是我想要的,对此我什么也找不到。 为什么我们不希望执行查询的一个示例是,如果查询向数据库中添加了一些内容。我们只希望它在不修改数据库的情况下对其进行仿真。 任何链接或示例将不胜

  • 我想在我的spring web应用程序中添加几个过滤器,但至少现在不会有任何关于安全性的内容。所以。没有spring-security我所能做的就是在web.xml中定义多个过滤器(定义过滤器的旧方法)。要能够使用spring过滤器链,我需要为我的项目添加spring-security作为依赖项,这似乎很奇怪。也许我做错了什么,而且确实有过滤器链可以在没有spring-security依赖的情况下

  • 问题内容: 我正在开发一个新项目(),并创建了一个包含大量变量的Object。由于我打算为所有这些添加吸气剂和设置器,所以我想知道:是否存在在给定类中自动生成吸气剂和设置器的捷径? 问题答案: 在所需类的源代码窗口中弹出上下文菜单(即右键单击)。然后选择子菜单;从该菜单中进行选择将导致出现向导窗口。 选择您要为其创建getter和setter的变量,然后单击。

  • 问题内容: 我的网页上有一个“瘦”列表:例如,一个包含100个项目的列表,每个项目的长度为一个单词。为了减少滚动,我想在页面的两列甚至四列中显示此列表。我该如何使用CSS? 我希望该解决方案具有灵活性,这样,如果列表增加到200个项目,则无需进行很多手动调整即可容纳新列表。 问题答案: ul { -moz-column-count: 4; -moz-column-gap: 20px; -webki