【问题标题】:How to execute specific query using jOOQ如何使用 jOOQ 执行特定查询
【发布时间】:2018-02-10 04:37:04
【问题描述】:

我在使用 PostgreSQL 数据库的项目中使用 jOOQ。在没有特定条件的情况下执行查询没有任何问题,但是如何使用 jOOQ 执行以下查询?

-- missed the top of query
WHERE pow.tags @> ARRAY [?] 
AND pow.tags @> ARRAY [?] 
AND position('access,yes' IN array_to_string(pow.tags, ',')) = 0 
AND city = ?

有时候,我需要用PostGIS函数来执行请求,我必须如何在jOOQ中编写它?

【问题讨论】:

    标签: java postgresql jooq


    【解决方案1】:

    这个谓词的写法如下:

    Condition condition =
         POW.TAGS.contains(new String[] { "a", "b", "c" })
    .and(POW.TAGS.contains(new String[] { "b", "c", "d" }) // Just assuming some tags here
    .and(position("access,yes", arrayToString(POW.TAGS, ",")).eq(zero()))
    .and(POW.CITY.eq("city"));
    

    以上答案假设以下静态导入:

    import static org.jooq.impl.DSL.*;
    import static org.jooq.util.postgres.PostgresDSL.*;
    

    Field.contains() 的可能问题

    如果您的TAGS 列的类型为TEXT,而不是VARCHAR,则Field.contains() 存在一个已知问题:

    https://github.com/jOOQ/jOOQ/issues/4754

    解决方法是使用纯 SQL:

    public static Condition myContains(Field<String[]> field, String[] array) {
        return contains("{0} @> {1}", field, val(array));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2018-02-16
      相关资源
      最近更新 更多