如何通过PostgreSQL添加PreparedStatement组合类型
这种复合类型是:
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';我想把它添加到
FullContact fc = (FullContact)value;
PGobject pgObj = castToPGObject(fc);
PreparedStatement st = [this is a reference i obtain from a method];
st.setObject(index,pgObj);castToPGObject将FullContact实例转换为行格式。这是一个实例转换的结果:
ROW(ROW('Italy','Country',null,10,'1202'),ROW('email','aPhone','aMobile',null))与INSERT一起使用时,它的工作原理就像一种魅力,但当我尝试使用PreparedStatement时,它失败了。我看过JDBC驱动程序的代码,似乎不支持STRUCT类型的PostgreSQL。我是不是遗漏了什么?
在setObject中,我得到的不是正确的转换,而是PreparedStatement在不应该添加的地方添加了'。例如,代替上面的行,我获得了:
'ROW(ROW(''Italy'',''Country'',null,10,''1202''),ROW(''email'',''aPhone'',''aMobile'',null))'这是失败的,因为它不再被认为是一个结构。我也尝试过添加
st.setEscapeProcessing(false);但是'还在增加。我需要使用PreparedStatement,因为我在Hibernate中定义自定义用户类型时遇到了一个问题。
我正在考虑加入JDBC驱动程序项目,尝试添加对STRUCT对象的支持。
发布于 2012-03-17 04:28:27
行构造函数ROW()是PostgreSQL 函数调用。您需要传递一个值-或者准确地说:表示复合类型的字符串文本。
尝试以下语法:
SELECT '("(Italy,""Country with space"",,10,1202)"
,"(email,aPhone,aMobile,)")'::fullcontact所以你的价值是:
("(Italy,""Country with space"",,10,1202)","(email,aPhone,aMobile,)")我在“有空间的国家”(Country with Space)中展示了带有特殊字符的语法。
阅读有关 in the manual的详细信息。
https://stackoverflow.com/questions/9736049
复制相似问题