2012-05-13 38 views
14

Tôi có một số loại tùy chỉnh. Họ là tất cả các enums cơ bản. Dưới đây là một ví dụ về những gì họ trông giống như:Chèn vào các loại SQL tùy chỉnh với các câu lệnh đã chuẩn bị trong java

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

Và tôi có một số báo cáo chuẩn bị trong Java, mà giống như thế này:

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

Và Java cung cấp cho tôi một số trường hợp ngoại lệ khó chịu như thế này:

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. 

Thật tuyệt vời khi đưa ra gợi ý cho tôi, nhưng tôi không chắc chắn làm cách nào để theo dõi nó.

+1

Nếu bạn có quyền kiểm soát của các lược đồ, một hạn chế kiểm tra trên một cột văn bản có thể làm việc giống như enum, nhưng dễ dàng hơn khi làm việc với Java. – Bill

Trả lời

19

Bạn đã cố gắng truyền cột thành enum chưa?

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

Explained trong Convert between Java enums and PostgreSQL enums bài viết của 'A web mã hóa trên blog' với mẫu:

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

Chính xác những gì tôi cần. Đã không sử dụng đúc trong SQL trước đây. Cảm ơn! –

Các vấn đề liên quan