Java 使用jooq更新hstore字段
除了执行普通sql之外,是否有人知道可以使用JOOQ通过输入hstore来更新值。 例如,我有表产品Java 使用jooq更新hstore字段,java,sql,postgresql,jooq,hstore,Java,Sql,Postgresql,Jooq,Hstore,除了执行普通sql之外,是否有人知道可以使用JOOQ通过输入hstore来更新值。 例如,我有表产品 id | characs | name ----+----------------------------------------------------------------------------+------------
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.实施 此绑定将用于数据库中的所有HSTORE列。它将负责处理用户类型
(例如Map
)与JDBC的交互,以生成数据库类型
(例如String
,或PGobject
)
下面可以看到如何使用JSON
类型执行此操作的示例:
HSTORE
类型的工作方式大致相同
2.通过普通SQL实现您自己的操作符
PostgreSQL有许多特定于供应商的运算符,这些运算符与特定于供应商的数据类型一起使用。这些操作符需要通过普通SQL实现。例如:
公共类扩展{
公共静态字段get(
字段(存储,字符串键){
返回DSL.field(“{0}->{1}”,String.class,hstore,DSL.val(key));
}
公共静态字段get(
字段hstore,字符串[]键){
返回DSL.field(“{0}->{1}”,字符串[].class,hstore,DSL.val(键));
}
公共静电场concat(
字段f1,
字段f2){
返回DSL.field(“{0}|{1}”,f1.getDataType(),f1,f2);
}
//等等。。。
}