sách gpt4 ăn đã đi

java - jooq - 如何在 jooq 中将数组绑定(bind)为参数 - PostgreSQL

In lại Tác giả: Walker 123 更新时间:2023-11-29 12:08:25 26 4
mua khóa gpt4 giày nike

如何在jooq的查询中绑定(bind)一个数组作为参数?

这是我添加名为“someIds”的命名参数的地方

    Query query = selectJoinStep.where(field("some.id").in(param("someIds")));

我尝试了下面的行将数组绑定(bind)到参数

    query.bind("someIds", someIds);

但在生成的 sql 中,我得到的是对象的引用,而不是如下所示的实际值

some.id in ('[Ljava.lang.Object;@1fee4fe3')

câu trả lời hay nhất

为什么您的方法不起作用?

一个常见的误解是 SQL IN (?) 谓词可以以某种方式支持数组绑定(bind)变量。这在我所知道的任何 SQL 方言中都是不可能的,你也不能用 jOOQ 这样做。通过“这种方式”,我的意思是指定一个绑定(bind)变量标记 (param) 并将多个 ID 绑定(bind)到它。

您收到特定错误消息的原因是 jOOQ 尝试将实际数组绑定(bind)变量绑定(bind)到单个参数。您可能知道,PostgreSQL 支持数组,如果您绑定(bind)了一个 Integer[],那么 jOOQ 会把它传递给 PostgreSQL JDBC 驱动程序。事实上,也许这就是您真正想要通过使用 PostgreSQL 特定的 = ANY(?) 谓词在这里做的事情

field("some.id").eq(any(someIds))

动态 TRONG 列表

为了拥有动态的TRONG列表,你必须传递一个动态的参数列表,例如

field("some.id").in(IntStream.range(0, someIds.length)
.mapToObj(i -> param("someId" + i))
.collect(Collectors.toList()))

然后,您将不得不使用单独绑定(bind)您的 ID

for (int i = 0; i < someIds.length; i++)
query.bind("someId" + i, someIds[i]);

或者,当然,您将它们直接绑定(bind)到谓词中:

field("some.id").in(IntStream.range(0, someIds.length)
.mapToObj(i -> param("someId" + i, i))
.collect(Collectors.toList()))

关于java - jooq - 如何在 jooq 中将数组绑定(bind)为参数 - PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49199733/

26 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress