java - 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(?)
通过只注入一个数组作为参数来使用技巧。