java - 在 java 中使用准备好的语句插入到自定义 SQL 类型中

标签 java sql postgresql prepared-statement

我有一些自定义类型。它们基本上都是枚举。这是它们的外观示例:

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

我在 Java 中有一些准备好的语句,看起来像这样:

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

Java 给了我一些像这样的讨厌的异常:

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.

很高兴他们能给我提示,但我不确定具体如何遵循。

最佳答案

您是否尝试过将列转换为枚举?

// 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, ?);

关于java - 在 java 中使用准备好的语句插入到自定义 SQL 类型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10571821/

相关文章:

SQL:选择最常出现的对应于不同列的值

mysql - 同 table 选择好友请求

c# - C# 中的 Firebird 连接

postgresql - 我应该从 PostgreSQL search_path 中删除 "$user"吗?

java - 读取可运行 jar 中主包中不存在的文本文件

java - 如何使用 org.apache.commons.codec.binary.base64 对 Java 对象进行 Base64 编码?

java - java如何给final属性赋值

java - 如何向类中的函数添加回调

postgresql - Flyway:迁移频繁变化的函数/存储过程的策略

sql - 使用递归查询像访问无向图一样访问有向图