Вставка в пользовательские типы SQL с подготовленными операторами в java

У меня есть пользовательские типы. Все они в основном перечислены. Вот пример того, как они выглядят:

CREATE TYPE card_suit AS ENUM
   ('spades',
    'clubs',
    'hearts',
    'diamonds');

И у меня есть несколько подготовленных операторов на Java, которые выглядят примерно так:

// Setup stuff up here.
sql = "INSERT INTO foo (suit) VALUES (?)";
st.setString(1, 'spades');
st.executeUpdate(sql);

И Java дает мне некоторые неприятные исключения вроде этого:

org.postgresql.util.PSQLException: ERROR: column "suit" is of type card_suit but expression is of type character varying
Hint: You will need to rewrite or cast the expression.

Приятно, чтобы они дали мне подсказку, но я точно не знаю, как ей следовать.

Ответы

Ответ 1

Вы пытались перевести столбцы в enum?

// Setup stuff up here.
sql = "INSERT INTO foo (suit) VALUES (?::card_suit)";
st.setString(1, 'spades');
st.executeUpdate(sql);

Объяснено в Преобразование между перечислениями Java и перечислениями PostgreSQL статьи "Блог веб-кодирования" с образцами:

INSERT INTO pet (pet_id, pet_type, name) 
         VALUES (?, CAST(? AS animal_type), ?);

--or

INSERT INTO pet (pet_id, pet_type, name) 
         VALUES (?, ?::animal_type, ?);