2012-05-13 14 views
14

में तैयार कथन के साथ कस्टम एसक्यूएल प्रकारों में सम्मिलित करना मेरे पास कुछ कस्टम प्रकार हैं। वे सभी मूल रूप से enums हैं। यहां बताया गया है कि वे की तरह लग रही का एक उदाहरण है:जावा

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

और मैं जावा में कुछ तैयार बयान है, जो कुछ इस तरह दिखाई है:

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

और जावा मुझे इस तरह कुछ बुरा अपवाद देता है:

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 के रूप में ही काम कर सकते हैं, जावा में अभी भी काम करना आसान है। – Bill

उत्तर

19

क्या आपने कॉलम को enum में डालने का प्रयास किया है?

// 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

बिल्कुल मुझे क्या चाहिए। पहले एसक्यूएल में कास्टिंग का उपयोग नहीं किया है। धन्यवाद! –