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

如何在jOOQ的WHERE条件下使用Postgres-JSON操作符?

长孙弘壮
2023-03-14

我有一个JSONB列,其中包含字符串数组,例如:["foo","bar"]

我想写jOOQ等价物:

选择*从某个可测量的地方某个列?|

…其中应绑定到字符串标记名的java列表。

似乎没有任何直接支持在jOOQ 3.8中,我已经研究了在条件下绑定到原始sql,但我不太确定语法;如果试图使用<代码>,情况会变得更糟 postgres运算符,该运算符与绑定表达式冲突。

更新:stacktrace 3.8.3

我把它简化为一个最小的测试。当使用jOOQ 3.8.3添加这样的条件时:

query.addConditions(DSL.condition("sometable.tags ?| array['sometag']"));

生成如下stacktrace:

Caused by: org.postgresql.util.PSQLException: No value specified for parameter 1.
    at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:228)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:163)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:622)
    at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:472)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:465)
    at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:194)
    at org.jooq.impl.AbstractResultQuery.execute(AbstractResultQuery.java:269)
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:348)
    ... 36 more

共有1个答案

曹浩
2023-03-14

jOOQ解析?|和作为绑定变量的类似运算符相关的问题已在jOOQ 3.8.3:https://github.com/jOOQ/jOOQ/issues/5307中得到解决

请注意,除了上述内容外,我还在另一个问题中记录了JDBC限制。在jOOQ中,您可以通过指定以下内容来解决此JDBC限制:

Settings settings = new Settings().withStatementType(StatementType.STATIC_STATEMENT);

另请参见:http://www.jooq.org/doc/latest/manual/sql-execution/statement-type

或者,回过头来使用jsonb_exists_any()函数而不是?|运算符。

 类似资料:
  • 我有一个表CategoryColours,如果没有找到一个类别,它应该返回默认类别“*”的颜色。 表包含以下行时的示例: 如果我搜索类别“1”,查询应该得到4种颜色。 如果我搜索类别“2”,它在表中没有记录,那么查询应该从类别“*”中获得2种颜色。 它不是我代码的障碍,因为我可以先检查我的类别是否有记录,或者选择我的类别+默认值,然后在其他类别有记录时删除默认值。

  • 选择查询打印三列,连接供应商名称和嵌套名称,并搜索名称: 我得到了错误: 错误:运算符不存在: 很好用。 有人可以协助JOIN语句吗?我不知道如何将两者等同起来。

  • 在Postgres中,我创建了一个UDT,如下所示 注意:我知道JOOQ在生成类时会生成枚举类型,但这是获取所需信息的唯一方法吗? 谢了!

  • 如何在c: if条件中使用"ft"的值。 以下是我在JSP中使用代码的方法(示例代码) 我的任务说明:需要减去两个日期并检查条件是否大于48小时,该行应高亮显示为绿色,否则精细(无变化)。 所以我从数据库中获取值,并在JSP页面中进行验证,以根据条件突出显示行。

  • 在SQL中,我可以执行以下类型的查询: 因为,没有方法。或者如果我只是想: 有没有一种方法可以使用Jooq来做到这一点?

  • 问题内容: 通常,每当我为SQL编写搜索查询时,我都会执行以下操作: 基本上,这模拟了条件WHERE子句。如果提供了@searchParam,我们只想将@searchParam与该列进行比较。 有没有办法使用Sequelize复制此内容? 编辑: 这是我的最佳尝试,但失败了: 更新: 我找到了一种方法,但是感觉像是一种解决方法。我敢肯定,必须有一种更优雅的方式。这可行,但是很丑陋: 问题答案: 您