java - 在所有列上解析 Array_agg

标签 java sql arrays jdbc java-8

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

相关文章:

android - 在 Android 中 moveToNext() 失败之前对 getType() 和 getColumnNames() 的 SQL 调用?

ios - 如何仅更改字典键?没有 swift 改变值(value)

java - 将加载圆添加到 JTable

java - 将一种测试方法的输出传递给另一种方法testng

java - visualvm 中的堆转储浏览器?

java - Android SAF 可以访问 SD 卡上的特定目录

mysql - 从 Excel 工作表导入数据库表

mysql - 有条件的重复键更新(仅在特定条件为真时更新)

Java,数组的setter方法。两类

c - C中的数组指针和指针数组