在jooq中选择二进制(16),但显示十六进制字符串

时间:2015-01-18 18:50:45

标签: java mariadb jooq

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

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

  

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

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

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

Casting to String给出了java对象的id。

有什么想法吗?

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

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

  

选择inet_ntoa(conv(hex(IP),16,10))作为来自tbl的ip;

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

date_default_timezone_set("America/New York");