【问题标题】:Example of jOOQ query with more than 22 columns超过 22 列的 jOOQ 查询示例
【发布时间】:2016-03-08 17:46:08
【问题描述】:

我正在寻找如何执行超过 22 行的 jOOQ 查询的示例。

http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/row-value-expressions/

告诉我这是可能的,但我找不到示例。

谁能指出我正确的方向?

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    从 jOOQ 3.7 开始(目前还没有计划改变这一点),22 是可以以类型安全方式获取的最大列数。超过 22,您仍然可以执行查询,但 jOOQ 的 API 将不再跟踪您的记录类型。例如:

    // Still type safe
    Result<Record22<Integer, String, ..., Integer>> result =
    DSL.using(configuration)
       .select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN22)
       .from(TABLE)
       .fetch();
    
    // Add one more column, and "lose" type safety
    Result<Record> result =
    DSL.using(configuration)
       .select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN22, STRING_COLUMN23)
       .from(TABLE)
       .fetch();
    

    从 API 用户的角度来看,无论您选择 22 列或更少列(安全类型)还是 23 列或更多列(没有类型安全),API“感觉” 完全相同。

    使用 UNION 丢失类型安全

    当您将类型安全的UNION 查询与非类型安全的查询进行比较时,差异可能会变得最明显:

    // Still type safe
    Result<Record22<Integer, String, ..., Integer>> result =
    DSL.using(configuration)
       .select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN21)
       .from(TABLE)
       .union(
    //  ^^^^^ compilation error here
        select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN21, INT_COLUMN22)
       .from(TABLE))
       .fetch();
    
    // Add one more column, and "lose" type safety
    Result<Record> result =
    DSL.using(configuration)
       .select(INT_COLUMN1, STRING_COLUMN2, ..., STRING_COLUMN23)
       .from(TABLE)
       .union(
    //  ^^^^^ This compiles, even if it's wrong
        select(INT_COLUMN1, STRING_COLUMN2, ..., STRING_COLUMN23, STRING_COLUMN24)
       .from(TABLE))
       .fetch();
    

    【讨论】:

    • 你能解释一下为什么选择 22 吗?
    • @StijndeWitt:当然:因为 Scala 也选择了 22。现在有趣的问题是:他们为什么选择 22? :)
    • 哈哈碰!你从来都懒得问?我想我对这个行业太好奇了。 :)
    • 答案在互联网上。这个数字非常随机(不足为奇)。对于大多数语言,您必须在某个地方停下来。或者,正如比尔盖茨曾经说过的那样:“22 个元组属性应该对每个人都足够了”
    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 2014-11-27
    • 1970-01-01
    • 2016-02-13
    • 2014-09-03
    • 2011-12-16
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多