java - 在java中使用array_agg序列化psql结果集

标签 java jdbc

我有 2 个包含数据的表

tripsheet=# select * from t1;
 c1 | c2 
----+----
  1 |  2
  1 |  3
(2 rows)

tripsheet=# select * from t2;
 c3 | c4 
----+----
  1 | 11
  1 | 12
(2 rows)

带查询
tripsheet=# select t1.*,array_agg(t2.*) from t1, t2 where t1.c1 = t2.c3 group by t1.c1, t1.c2;
 c1 | c2 |      array_agg      
----+----+---------------------
  1 |  3 | {"(1,11)","(1,12)"}
  1 |  2 | {"(1,11)","(1,12)"}
(2 rows)

我正在使用 java jdbc 来处理结果集,我无法将 (1,11) 转换为相应的 pojo。

以下是我的代码
String sql="select t1.*,array_agg(t2.*) from t1, t2 where t1.c1 = t2.c3 group by t1.c1, t1.c2;";
            ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()) {
                Array array = rs.getArray("array_agg");
                Object[] ints = (Object[]) array.getArray();
                ResultSet rs2 = array.getResultSet();
                while(rs2.next()) {
                    rs2.getObject(1);
                    System.out.println(rs2.getObject(2));
                }
            }

我能够得到结果
(1,11)
(1,12)
(1,11)
(1,12)

但是我无法进一步分解它们以获得单独的字段 1 和 11。

上面的元组/对象属于 org.postgresql.util.PGobject 这应该映射到 T2 pojo。

是否可以将 PGobject 转换为 T2 pojo?

最佳答案

您可以将数组直接转换为预期的类型,如下所示:

(Integer[]) rs.getArray("array_agg").getArray()
然后你可以把它转换成一个列表:
List<Integer> list = Arrays.asList((Integer[]) rs.getArray("array_agg").getArray());

关于java - 在java中使用array_agg序列化psql结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663355/

相关文章:

java - 使用 JDBC 领域进行身份验证

java - 通过 JSON 的多部分请求没有得到响应?

java - Apache Tiles + 文件夹路径中的空格

java - hadoop 2.3.0 源码构建错误

java - JDBC - SQL 语句执行时间记录

java - 从结果集中获取数据太慢

java - SmartGWT:组合框 - ValueMap 未出现

java - 使用 Prowide-Core 生成人类可读的 SWIFT 消息?

java - 使用 JDBC 和预准备语句时 SQL 语法出现问题

java - 如何在服务层单元测试中模拟数据库结果?