select jooq 中的二进制 (16),但显示十六进制字符串
select binary(16) in jooq, but show hex string
在 table 中是一个 pk,uuid 存储为二进制 (16)。
我可以使用普通 sql:
检索十六进制
select hex(UUID) as uuid from tbl ;
但是 jooq 等价物不知道十六进制函数。
Result<Record1<byte[]>> result = ctx
.select(tbl.UUID)
.from(tbl)
.fetch();
转换为字符串给出 java 对象的 ID。
有什么想法吗?
Result<Record1<byte[]>> result = ctx
.select(tbl.UUID.cast(String.class))
.from(tbl)
.fetch();
使用 ip (ipv4, ipv6) 的相同问题:
select inet_ntoa(conv(hex(IP), 16, 10)) as ip from tbl ;
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()
@Lukas Eder,你可以进一步简化它。
public static Field<String> hex(Field<byte[]> field) {
return DSL.function("hex", String.class, field);
}
在 table 中是一个 pk,uuid 存储为二进制 (16)。
我可以使用普通 sql:
检索十六进制select hex(UUID) as uuid from tbl ;
但是 jooq 等价物不知道十六进制函数。
Result<Record1<byte[]>> result = ctx
.select(tbl.UUID)
.from(tbl)
.fetch();
转换为字符串给出 java 对象的 ID。
有什么想法吗?
Result<Record1<byte[]>> result = ctx
.select(tbl.UUID.cast(String.class))
.from(tbl)
.fetch();
使用 ip (ipv4, ipv6) 的相同问题:
select inet_ntoa(conv(hex(IP), 16, 10)) as ip from tbl ;
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()
@Lukas Eder,你可以进一步简化它。
public static Field<String> hex(Field<byte[]> field) {
return DSL.function("hex", String.class, field);
}