如何通过PreparedStatement
添加PostgreSQL复合类型?
复合类型是:JDBC 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
,因为我在定义自定义usertype时遇到了一个问题。
我正在考虑加入JDBC Driver项目来尝试添加对STRUCT对象的支持。
对不起......问题不在于SQL本身,而在于使用了准备好的语句,它没有给我机会来设置结构类型......我的意思是,当我将正确的字符串添加到一个转义发生给我错误的结果,我已经在我的问题上报告了......星期一我会尝试发布一个完整的示例......但是,感谢您对语言的支持和更正;-) – quonn 2012-03-18 00:06:13