gpt4 book ai didi

java - 使用 jooq 更新 hstore 字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:55 24 4
gpt4 key购买 nike

有谁知道是否可以使用 JOOQ 在 hstore 中通过键更新值,除了执行纯 sql。例如,我有表产品

 id |                                  characs                                   |         name         
----+----------------------------------------------------------------------------+--------------
1 | "key"=>"value", "key3"=>"test2" | test1
2 | "key"=>"value" | test3
3 | "keyNew"=>"valueNew" | test3
4 | "keyNew"=>"valueNew" | test4
5 | "date"=>"Dec 2012", "price"=>"500", "author"=>"Dave", "currency"=>"dollar" | test5

我想通过键 key3 更新值。为此,我可以执行纯 sql:

UPDATE products SET name='test1New', characs=characs || '"key3"=>"value3"'::hstore where id=1

是否可以使用 JOOQ 的 DSL

最佳答案

这很有可能,但还不支持开箱即用。为了实现您自己的 HSTORE 支持,您需要:

1。实现 org.jooq.Binding

此绑定(bind)将用于数据库中的所有 HSTORE 列。它将负责处理您的用户类型的交互 <U> (例如 Map<String, String> )与 JDBC,以生成数据库类型 <T> (例如 StringPGobject)。

如何使用 JSON 执行此操作的示例类型可以在这里看到:

HSTORE type 的工作方式大致相同

2。通过纯 SQL 实现您自己的运算符

PostgreSQL 有许多特定于供应商的运算符,它们与特定于供应商的数据类型一起使用。这些运算符将需要通过纯 SQL 来实现。例如:

public class DSLExtensions {
public static Field<String> get(
Field<Map<String, String>> hstore, String key) {
return DSL.field("{0} -> {1}", String.class, hstore, DSL.val(key));
}

public static Field<String[]> get(
Field<Map<String, String>> hstore, String[] keys) {
return DSL.field("{0} -> {1}", String[].class, hstore, DSL.val(keys));
}

public static Field<Map<String, String>> concat(
Field<Map<String, String>> f1,
Field<Map<String, String>> f2) {
return DSL.field("{0} || {1}", f1.getDataType(), f1, f2);
}

// etc...
}

关于java - 使用 jooq 更新 hstore 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com