使用JDBC的多列Postgresql array_agg

时间:2015-08-14 18:46:27

标签: postgresql jdbc aggregate-functions

我正在尝试加入一个表,该表可能有给定id的多个条目,并在数组中聚合与此id对应的行。这在SQL查询中如下所示:

.stack-work

这可以按预期工作,但我在读取JDBC中的结果时遇到了麻烦。

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)

到目前为止,我的努力始终以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.,检索值afoo

编辑:我还应该提一下,barfoo的类型不同。

1 个答案:

答案 0 :(得分:2)

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()));
    }