首页 > 解决方案 > postgres jdbc 批量查询复合 PK

问题描述

假设我们有这张表:

CREATE TABLE element (
    pk1 BIGINT NOT NULL,
    pk2 BIGINT NOT NULL,
    pk3 BIGINT NOT NULL,
    -- other columns ...
    PRIMARY KEY (pk1, pk2, pk3)
);

我想在 jdbc 中批量查询复合 PK。

如果是单PK,肯定更容易:

PreparedStatement ps = conn.prepareStatement("SELECT * FROM element WHERE id=ANY(?)");
int[] idArr = new int[]{1,2,3};
ps.setArray(1, idArr);

应该能够做到这一点。

但是复合PK,我不知道该怎么办......在psql,我可以这样做:

SELECT * 
FROM element 
WHERE (pk1, pk2, pk3) IN ((1, 2, 3), (4, 5, 6));

但在 jdbc 中不知道。基本上我相信我们需要在 中构造一个tuple东西jdbc,然后我们可以有一个元组数组。有任何想法吗?

添加:

我已经考虑过类似的事情SELECT * FROM element where (pk1, pk2, pk3) in ((?,?,?),(?,?,?).....,然后按值注入复合 PK 值,但我通常有非常大的查询,这将超过参数限制,所以我想=ANY(?)通过只注入一个数组作为参数来使用技巧。

标签: javapostgresqljdbc

解决方案


推荐阅读