2012-05-13 5 views
14

カスタムタイプがいくつかあります。それらはすべて基本的にenumです。Javaでプリペアドステートメントを使用してカスタムSQL型に挿入する

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は私にこのようないくつかの厄介な例外ができます:

をここでは、彼らがどのように見えるかの例です。

私にヒントを与えるのは良いことですが、私はそれに従う方法を正確には分かりません。

+1

は、テキスト列にチェック制約が列挙型と同じように動作することができ、 Javaでの作業は簡単です。 – Bill

答えて

19

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

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

はサンプルに「ウェブコーディングブログ」の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, ?); 
+1

まさに私が必要としたもの。以前はSQLでのキャストを使用していませんでした。ありがとう! –

関連する問題