19

私はいくつかのカスタムタイプを持っています。それらはすべて基本的に列挙型です。それらがどのように見えるかの例を次に示します。

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.

ヒントを教えてくれるのはいいのですが、正確にそれに従う方法がわかりません。

4

2 に答える 2

27

列を列挙型にキャストしようとしましたか?

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

「Web コーディング ブログ」のConvert between Java enums and PostgreSQL enums記事でサンプルを使用して説明されています。

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, ?);
于 2012-05-13T12:54:26.517 に答える
0

別のアプローチは

st.setObject(1, 'spades', Types.OTHER);
于 2020-03-17T15:56:07.507 に答える