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

时间:2019-06-14 14:23:53

标签: 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 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[],那会更糟。

1 个答案:

答案 0 :(得分:1)

执行select * from test而不是select p.age, p.name from test。然后,将每个成员作为一个单独的列提供,JDBC可以正常对待这些列。