如何使用PostgreSQL和JDBC选择自定义复合类型

如何使用PostgreSQL和JDBC选择自定义复合类型,postgresql,jdbc,Postgresql,Jdbc,如何从PostgreSQL和JDBC中选择复合类型?我找到的唯一答案建议您必须解析字符串值。我很惊讶有那么糟糕 create type person as (age int, name text); create table test (id int, p person); insert into test values (1, ROW(45, 'Joe')); 在Java中 var ps = pgConn.prepareStatement("select * from test") var

如何从PostgreSQL和JDBC中选择复合类型?我找到的唯一答案建议您必须解析字符串值。我很惊讶有那么糟糕

create type person as (age int, name text);
create table test (id int, p person);
insert into test values (1, ROW(45, 'Joe'));
在Java中

var ps = pgConn.prepareStatement("select * from test")
var rs = ps.executeQuery()
rs.next()
// PGobject here is not part of JDBC, but specific to the PG driver.
var p = (PGobject)rs.getObject(2)
// p.value is "(45,Joe)"
显然,解析该特定值并不困难,但嵌套的单引号和双引号、逗号、时间戳等又如何呢?我希望有一种合理的方法来获取各个字段:

p.getInt(1)
p.getString(2)

如果你有一个数组,情况会更糟,例如:
person[]

从测试中选择p.age、p.name,而不是
从测试中选择*
。然后将每个成员作为一个单独的列,JDBC可以正常处理该列