首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC PreparedStatement:如何添加复合类型

JDBC PreparedStatement:如何添加复合类型
EN

Stack Overflow用户
提问于 2012-03-16 10:58:57
回答 1查看 1.6K关注 0票数 3

如何通过PostgreSQL添加PreparedStatement组合类型

这种复合类型是:

代码语言:javascript
复制
CREATE TYPE fullcontact AS (address address,contacts contact);
ALTER TYPE fullcontact OWNER TO postgres;
COMMENT ON TYPE fullcontact IS 'Describe a type for a contact info with phone, email, and  address';

我想把它添加到

代码语言:javascript
复制
FullContact fc = (FullContact)value;
PGobject pgObj = castToPGObject(fc);
PreparedStatement st = [this is a reference i obtain from a method];
st.setObject(index,pgObj);

castToPGObjectFullContact实例转换为行格式。这是一个实例转换的结果:

代码语言:javascript
复制
ROW(ROW('Italy','Country',null,10,'1202'),ROW('email','aPhone','aMobile',null))

与INSERT一起使用时,它的工作原理就像一种魅力,但当我尝试使用PreparedStatement时,它失败了。我看过JDBC驱动程序的代码,似乎不支持STRUCT类型的PostgreSQL。我是不是遗漏了什么?

setObject中,我得到的不是正确的转换,而是PreparedStatement在不应该添加的地方添加了'。例如,代替上面的行,我获得了:

代码语言:javascript
复制
'ROW(ROW(''Italy'',''Country'',null,10,''1202''),ROW(''email'',''aPhone'',''aMobile'',null))'

这是失败的,因为它不再被认为是一个结构。我也尝试过添加

代码语言:javascript
复制
st.setEscapeProcessing(false);

但是'还在增加。我需要使用PreparedStatement,因为我在Hibernate中定义自定义用户类型时遇到了一个问题。

我正在考虑加入JDBC驱动程序项目,尝试添加对STRUCT对象的支持。

EN

回答 1

Stack Overflow用户

发布于 2012-03-17 04:28:27

行构造函数ROW()是PostgreSQL 函数调用。您需要传递一个-或者准确地说:表示复合类型的字符串文本。

尝试以下语法:

代码语言:javascript
复制
SELECT '("(Italy,""Country with space"",,10,1202)"
        ,"(email,aPhone,aMobile,)")'::fullcontact

所以你的价值是:

代码语言:javascript
复制
("(Italy,""Country with space"",,10,1202)","(email,aPhone,aMobile,)")

我在“有空间的国家”(Country with Space)中展示了带有特殊字符的语法。

阅读有关 in the manual的详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9736049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档