第一。。。。我有一个类似这样的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)
我正在尝试将此枚举类型发送到PostgresCallableStatement
String query="{call auth.MyFunction(?,?,?)}";
CallableStatement ps=conn.prepareCall(funcionLlamar);

第一意图:ps.setObject("p_tipo_plataforma", usuario.tipoPlataforma);
哪里
usuario.tipoPlataforma
java - 将EnumType传递给Postgres函数-LMLPHP
错误:
java.sql.SQLFeatureNotSupportedException:方法
org.postgresql.jdbc.PgCallableStatement.setObject(字符串,对象)是
尚未实施。
第二个意图:ps.setObject(1, usuario.tipoPlataforma.name());
错误:
函数auth.MyFunction(字符变化,字符变化,
整数)不存在
更新:
第三个意图:ps.setObject(1, usuario.tipoPlataforma);
错误:
无法推断要用于的实例的SQL类型
枚举器.TipoPlataforma。使用setObject()
使用显式类型值指定要使用的类型。
问题是,如果postgres中的函数只接受此类型,如何将枚举类型作为参数发送?

最佳答案

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

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

关于java - 将EnumType传递给Postgres函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52451677/

10-10 03:31