I have some custom types. They are all basically enums. Here is an example of what they look like:
CREATE TYPE card_suit AS ENUM
('spades',
'clubs',
'hearts',
'diamonds');
And I have some prepared statements in Java, which look something like this:
// Setup stuff up here.
sql = "INSERT INTO foo (suit) VALUES (?)";
st.setString(1, 'spades');
st.executeUpdate(sql);
And Java gives me some nasty exceptions like this:
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.
It's nice of them to give me a hint, but I'm not sure exactly how to follow it.
To retrieve data from a table using a SELECT statement with parameter markers, you use the PreparedStatement. executeQuery method.
A PreparedStatement is a pre-compiled SQL statement. It is a subinterface of Statement. Prepared Statement objects have some useful additional features than Statement objects. Instead of hard coding queries, PreparedStatement object provides a feature to execute a parameterized query.
To execute a statement with Where clause using PreparedStatement. Prepare the query by replacing the value in the clause with place holder “?” and, pass this query as a parameter to the prepareStatement() method.
Prepared statements are interesting from a stored programming perspective because they allow us to create dynamic SQL calls. The SQL text may contain placeholders for data values that must be supplied when the SQL is executed.
Have you tried to cast column to enum?
// Setup stuff up here.
sql = "INSERT INTO foo (suit) VALUES (?::card_suit)";
st.setString(1, 'spades');
st.executeUpdate(sql);
Explained in Convert between Java enums and PostgreSQL enums article of 'A web coding blog' with samples:
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, ?);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With