如何从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[]
,那会更糟。
答案 0 :(得分:1)
执行select * from test
而不是select p.age, p.name from test
。然后,将每个成员作为一个单独的列提供,JDBC可以正常对待这些列。