java-jooq-如何在jooq-PostgreSQL中将数组绑定为param
如何在jooq查询中将数组绑定为param 这就是我添加名为“someid”的命名参数的地方java-jooq-如何在jooq-PostgreSQL中将数组绑定为param,java,arrays,postgresql,list,jooq,Java,Arrays,Postgresql,List,Jooq,如何在jooq查询中将数组绑定为param 这就是我添加名为“someid”的命名参数的地方 Query query = selectJoinStep.where(field("some.id").in(param("someIds"))); 我尝试使用下面的行将数组绑定到参数 query.bind("someIds", someIds); 但在生成的sql中,我得到的是对象的引用,而不是实际值,如下所示 ('[Ljava.lang.Object;@1fee4fe3')中的s
Query query = selectJoinStep.where(field("some.id").in(param("someIds")));
我尝试使用下面的行将数组绑定到参数
query.bind("someIds", someIds);
但在生成的sql中,我得到的是对象的引用,而不是实际值,如下所示
('[Ljava.lang.Object;@1fee4fe3')中的some.id
为什么你的方法不起作用?
一个常见的误解是(?)谓词中的SQL可以以某种方式支持数组绑定变量。这在我所知道的任何SQL方言中都是不可能的,您也不能用jOOQ这样做。所谓“这种方式”,我指的是指定一个绑定变量标记(param
)并将多个ID绑定到它
您收到该特定错误消息的原因是jOOQ试图将实际的数组绑定变量绑定到单个参数。您可能知道,PostgreSQL支持数组,并且如果您绑定了整数[]
,那么jOOQ会将其传递给PostgreSQL JDBC驱动程序。事实上,也许这就是您真正想要在这里使用PostgreSQL特定的=ANY(?)
谓词所做的
字段(“some.id”).eq(任意(someid))
列表中的动态
要在
-列表中具有动态的,必须传递参数的动态列表,例如:
字段(“some.id”).in(IntStream.range(0,someid.length)
.mapToObj(i->param(“someId”+i))
.collect(收集器.toList())
然后,您必须使用
for(int i=0;i
当然,也可以将它们直接绑定到in谓词:
字段(“some.id”).in(IntStream.range(0,someid.length)
.mapToObj(i->param(“someId”+i,i))
.collect(收集器.toList())
感谢您的回复,最后我使用了field(“some.id”).eq(any(someid))