首先。...我有一个像这样的postgres函数:
CREATE OR REPLACE FUNCTION auth.MyFunction (
platform autorizacion.e_tipo_plataforma, //Enum Type
pAppId varchar,
pVersion integer
)
e_tipo_plataforma
是:
CREATE TYPE autorizacion.e_tipo_plataforma AS ENUM (
'Web', 'Escritorio', 'Movil', 'Servicio');
如您所见,调用函数的参数是Enum Type
(e_tipo_plataforma)
我正在尝试将此EnumType发送到Postgres CallableStatement
:
String query="{call auth.MyFunction(?,?,?)}";
CallableStatement ps=conn.prepareCall(funcionLlamar);
第一个意图:ps.setObject("p_tipo_plataforma", usuario.tipoPlataforma);
错误:
java.sql.SQLFeatureNotSupportedException:方法 org.postgresql.jdbc.PgCallableStatement.setObject(String,Object)是 尚未实施。
第二个意图:ps.setObject(1, usuario.tipoPlataforma.name());
错误:
function auth.MyFunction(字符变化,字符变化, 整数)不存在
更新:
第三意图:ps.setObject(1, usuario.tipoPlataforma);
错误:
无法推断用于以下实例的SQL类型 枚举器.TipoPlataforma。使用setObject() 带有明确的Types值以指定要使用的类型。
问题是,如果postgres中的函数仅接受此类型,如何将EnumType作为参数发送呢?
答案 0 :(得分:1)
您可以将枚举值作为字符串传递(当然,假设您的Java和PostgreSQL枚举的名称匹配!),而无需将字符串转换为枚举到数据库的繁重工作:
ps.setString("p_tipo_plataforma", usuario.tipoPlataforma.name());