Hibernate JDBC PreparedStatement:如何添加复合类型
如何通过Hibernate JDBC PreparedStatement:如何添加复合类型,hibernate,postgresql,jdbc,prepared-statement,composite-types,Hibernate,Postgresql,Jdbc,Prepared Statement,Composite Types,如何通过PreparedStatement添加PostgreSQL复合类型? 组合类型为: 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'
PreparedStatement
添加PostgreSQL复合类型?组合类型为:
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驱动程序的代码,似乎不支持PostgreSQL的结构类型。我错过什么了吗
从setObject
中,我得到的不是正确的转换PreparedStatement
而是在不应该添加的地方添加'
。例如,我得到的不是上面的行,而是:
'ROW(ROW(''Italy'',''Country'',null,10,''1202''),ROW(''email'',''aPhone'',''aMobile'',null))'
这会失败,因为它不再被识别为结构。我也尝试加入
st.setEscapeProcessing(false);
但是仍然添加了”
。我需要使用PreparedStatement
,因为在定义自定义用户类型时,我在Hibernate中遇到了一个问题。我正在考虑加入JDBC驱动程序项目,尝试添加对STRUCT对象的支持。行构造函数
row()
是一个PostgreSQL函数调用。您需要传递一个值——或者更准确地说:一个表示复合类型的字符串文本
请尝试以下语法:
SELECT '("(Italy,""Country with space"",,10,1202)"
,"(email,aPhone,aMobile,)")'::fullcontact
因此,您的价值将是:
("(Italy,""Country with space"",,10,1202)","(email,aPhone,aMobile,)")
我加入了“带空格的国家”来演示带有特殊字符的语法。阅读有关的详细信息。行构造函数
row()
是一个PostgreSQL函数调用。您需要传递一个值——或者更准确地说:一个表示复合类型的字符串文本
请尝试以下语法:
SELECT '("(Italy,""Country with space"",,10,1202)"
,"(email,aPhone,aMobile,)")'::fullcontact
因此,您的价值将是:
("(Italy,""Country with space"",,10,1202)","(email,aPhone,aMobile,)")
我加入了“带空格的国家”来演示带有特殊字符的语法。阅读有关的详细信息。对不起……问题不在于SQL本身,而在于使用预先准备好的语句,它没有给我设置结构类型的机会……我的意思是,当我添加正确的字符串时,会出现转义,给我错误的结果,我在我的问题上报告了这个结果……周一,我将尝试发布一个完整的例如……不过,感谢您对语言的支持和纠正;-)抱歉…问题不在SQL本身,而是在使用prepared语句时,它没有给我设置结构类型的机会…我的意思是,当我添加正确的字符串时,会发生转义,给我错误的结果,我在我的问题上报告了这个结果…周一,我将尝试发布一个完整的示例…不过,感谢您的支持支持和您对语言的更正;-)