我在带有 Java-8
的 Ubuntu 10.6-1.pgdg18.04+1 上使用 PostgreSQL 10.6。我有两个表:
表格测试
Column | Type |
--------+----------------------+
id | character varying(5) |
表测试2
Column | Type |
--------+-----------------------+---
c1 | character varying(5) |
c2 | character varying(10) |
c3 | character varying(10) |
c4 | character varying(10) |
我正在尝试通过JOIN
一次从两个表中获取结果。
这是我的查询
SELECT t1.*, Array_agg(t2.*) AS ent
FROM test AS t1 LEFT JOIN
test2 AS t2
ON t1.id = t2.c1 GROUP BY t1.id;
给出结果
id | ent
----+---------------------------
a | {"(a,e,f,g)","(a,b,c,d)"}
获取值ent列后
Array arr = rs.getArray("ent");
Object objects = arr.getArray();
对象包含
objects = ["(a,e,f,g)","(a,b,c,d)"]
现在如何解析结果并将值作为单独的值,因为它是对象类型?
将其转换为 ResultSet[]
会得到 cannot be cast to [Ljava.sql.ResultSet
最佳答案
据我从您的问题中可以看出,getArray
方法返回字符串的Array
。您可以将结果转换为字符串数组,而不是将 Array
转换为 Object
。
转换示例代码:
String[] arr = (String[])rs.getArray("ent");
一旦你有了一个字符串数组,你就可以使用字符串函数来解析和提取值。例如,如果在您的示例输入上执行以下代码:
String[] arr = (String[])rs.getArray("ent");
for(String row : arr) {
String[] letters = row.replace("(","").replace(")","").split(",");
for(String letter : letters) {
System.out.println(letter);
}
}
应打印以下结果:
a
e
f
g
a
b
c
d
关于java - 在所有列上解析 Array_agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53804681/