第一。。。。我有一个类似这样的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)我正在尝试将此枚举类型发送到Postgres
CallableStatement
:String query="{call auth.MyFunction(?,?,?)}";
CallableStatement ps=conn.prepareCall(funcionLlamar);
第一意图:
ps.setObject("p_tipo_plataforma", usuario.tipoPlataforma);
哪里
usuario.tipoPlataforma
错误:
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/