2012-05-13 14 views
14

Bazı özel türlerim var. Hepsi temelde enumlar. İşte göründüklerini bir örnektir:Java'da hazırladığınız ifadelerle özel SQL türlerine ekleme

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

Ve şuna benzer Java bazı hazır deyimleri vardır:

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

Ve Java böyle bazı kötü istisnaları bana verir:

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. 

Bana bir ipucu vermekten hoşnut, ama nasıl takip edeceğime tam olarak emin değilim.

+1

bir metin sütun üzerinde bir kontrol kısıtı enum aynı çalışabilir, henüz Java ile çalışmak daha kolaydır. – Bill

cevap

19

Sütunu enum için kullanmaya çalıştınız mı?

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

örnekleri ile 'Bir web kodlama blogun' arasında Convert between Java enums and PostgreSQL enums makalesinde Açıklaması: şemanın denetim varsa

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

Tam olarak neye ihtiyacım vardı. Daha önce SQL'de döküm kullanılmadı. Teşekkürler! –

İlgili konular