【问题标题】:select binary(16) in jooq, but show hex string在jooq中选择二进制(16),但显示十六进制字符串
【发布时间】:2015-03-16 19:10:18
【问题描述】:

表中有一个 pk,uuid 存储为二进制 (16)。

我可以使用普通 sql 检索十六进制:

从 tbl 中选择 hex(UUID) 作为 uuid;

但是 jooq 等价物不知道十六进制函数。

Result<Record1<byte[]>> result = ctx
                        .select(tbl.UUID)
                        .from(tbl)
                        .fetch();

转换为 String 会给出 java 对象的 id。

有什么想法吗?

Result<Record1<byte[]>> result = ctx
                        .select(tbl.UUID.cast(String.class))
                        .from(tbl)
                        .fetch();

使用 ip (ipv4, ipv6) 时同样的问题:

从 tbl 中选择 inet_ntoa(conv(hex(IP), 16, 10)) 作为 ip ;

【问题讨论】:

    标签: java mariadb jooq


    【解决方案1】:

    jOOQ 不支持开箱即用的所有供应商特定功能。每当您缺少这样的功能时,您可以使用plain SQL 自己创建它:

    public class DSLExtensions {
        public static Field<String> hex(Field<byte[]> field) {
            return DSL.field("hex({0})", String.class, field);
        }
    }
    

    这显然也适用于您的其他函数,例如 inet_ntoa()conv()

    【讨论】:

      【解决方案2】:

      @Lukas Eder,您可以进一步简化。

      public static Field<String> hex(Field<byte[]> field) {
          return DSL.function("hex", String.class, field);
      }
      

      【讨论】:

        猜你喜欢
        • 2017-04-20
        • 2014-03-11
        • 2017-03-22
        • 2016-02-26
        • 2012-12-12
        • 1970-01-01
        • 2017-03-09
        • 2014-07-15
        相关资源
        最近更新 更多