我有 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/