Как добавить составной тип 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(ROW('Italy','Country',null,10,'1202'),ROW('email','aPhone','aMobile',null))
Используется с INSERT, он работает как брелок, но когда я пытаюсь использовать PreparedStatement
, он терпит неудачу.Я посмотрел на код драйвера JDBC, и кажется, что тип STRGT PostgreSQL не поддерживается.Я что-то упускаю?
С setObject
Я получаю, что вместо правильного преобразования PreparedStatement
добавляет '
, где это не должно быть.Например, вместо строки, указанной выше, я получаю:
'ROW(ROW(''Italy'',''Country'',null,10,''1202''),ROW(''email'',''aPhone'',''aMobile'',null))'
И это терпит неудачу, потому что оно больше не распознается как структура.Я попытался также, добавив
st.setEscapeProcessing(false);
, но '
все еще добавляются.Мне нужно использовать PreparedStatement
из-за проблемы, с которой я столкнулся в Hibernate при определении пользовательского типа.
Я думаю о присоединении к проекту драйвера JDBC, чтобы попытаться добавить поддержку объекта STRUCT.