2012-05-13 9 views
14

Ich habe einige benutzerdefinierte Typen. Sie sind alle im Grunde enums. Hier ist ein Beispiel, wie sie aussehen:Einfügen in benutzerdefinierte SQL-Typen mit vorbereiteten Anweisungen in Java

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

Und ich habe einige vorbereitete Anweisungen in Java, die etwa wie folgt aussehen:

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

und Java gibt mir einige böse Ausnahmen wie folgt aus:

Es ist nett von ihnen, mir einen Hinweis zu geben, aber ich bin mir nicht sicher, wie ich es genau befolgen soll.

+1

Wenn Sie die Kontrolle über das Schema haben, eine Check-Einschränkung auf eine Textspalte die gleiche wie die Enum arbeiten können, Es ist jedoch einfacher in Java zu arbeiten. – Bill

Antwort

19

Haben Sie versucht, Spalte zu enum zu werfen?

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

in Convert between Java enums and PostgreSQL enums Artikel von ‚Web-Codierung Blog‘ Erklärung mit Proben:

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

Genau das, was ich brauchte. Habe vorher noch kein Casting in SQL verwendet. Vielen Dank! –

Verwandte Themen