我正在尝试加入一个可能具有给定 id 的多个条目的表,并将与该 id 对应的行聚合到一个数组中。 SQL 查询如下所示:
SELECT * from data
LEFT JOIN (select id, array_agg(row(foo, bar)) AS foo_bar_data from foo_bar_table group by id) AS temp using(id)
这按预期工作,但我在 JDBC 中读出结果时遇到问题。
ResultSet rs = st.executeQuery(...)
Array a = rs.getArray("foo_bar_data")
// Now I want to iterate over the array, reading the values foo and bar of each item.
到目前为止,我的努力总是以 Method org.postgresql.jdbc4.Jdbc4Array.getArrayImpl(long,int,Map) is not Yet Implemented.
异常结束。如何迭代 a
,检索值 foo
和 bar
?
编辑:我可能还应该提到,foo
和 bar
没有相同的类型。
最佳答案
Postgres JDBC 驱动程序不支持除基本类型(数字、日期/时间戳、字符串)以外的任何 JDBC 数组。您可以调用 array_agg
两次并在每行获取两个数组:
try (Connection db = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres");
ResultSet rs = db.createStatement().executeQuery("select array_agg(i), array_agg(s) from (select 1 i, 'a' s union select 2 i, 'b' s) t")) {
rs.next();
System.out.println(Arrays.toString((Object[]) rs.getArray(1).getArray()));
System.out.println(Arrays.toString((Object[]) rs.getArray(2).getArray()));
}
关于Postgresql array_agg 多列与 JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016829/