将EnumType传递给Postgres函数

时间:2018-09-21 22:23:30

标签: java postgresql enums enumerable

首先。...我有一个像这样的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);

usuario.tipoPlataforma enter image description here

错误:

  

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作为参数发送呢?

1 个答案:

答案 0 :(得分:1)

您可以将枚举值作为字符串传递(当然,假设您的Java和PostgreSQL枚举的名称匹配!),而无需将字符串转换为枚举到数据库的繁重工作:

ps.setString("p_tipo_plataforma", usuario.tipoPlataforma.name());