为了账号安全,请及时绑定邮箱和手机立即绑定

从java调用Postgres存储过程,返回表

从java调用Postgres存储过程,返回表

当年话下 2021-10-28 09:23:09
我做了一个 Postgres 存储过程:CREATE OR REPLACE FUNCTION GetUser(ipUserId integer)RETURNS setof users AS $$BEGIN  IF ipUserId is null THEN    return query select * from users A order by modifieddate desc;  END IF;  return query select * from users where iduser = ipUserId;END;$$ LANGUAGE plpgsql;我尝试在 Java 中像这样使用它:    StoredProcedureQuery query = entityManager.createStoredProcedureQuery("GetUser").            registerStoredProcedureParameter("ipUserId",                    Integer.class, ParameterMode.IN)            .registerStoredProcedureParameter("users",                    List.class, ParameterMode.OUT)            .setParameter("postId", 1);或者 StoredProcedureQuery query = entityManager.createStoredProcedureQuery("GetUser")                .registerStoredProcedureParameter(1,void.class, ParameterMode.REF_CURSOR)                .registerStoredProcedureParameter(2,Integer.class, ParameterMode.IN)                .setParameter(2, ipIdUser);我想将结果存储在一个列表中。我应该怎么做,因为我遇到了各种错误?
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您可以尝试使用 CallableStatement。假设您的连接变量没问题:


CallableStatement stmt = con.prepareCall("{call SCHEMA.PROCEDURE_NAME (?, ?)}");

stmt.setInt(1, custom_var);

stmt.registerOutParameter(2, OracleTypes.INTEGER);

stmt.execute();

得到结果: stmt.getInt(3); stmt.getString(4)


如果你不能成功尝试使用 JdbcTemplate:


SimpleJdbcCall call = new SimpleJdbcCall(this.jdbcTemplate).withSchemaName(SCHEMA).withProcedureName(PROC);

MapSqlParameterSource params = new MapSqlParameterSource();

params.addValue("ipUserId", custom_var);

Map out = call.execute(params);

要获得单个结果: Integer.parseInt("" + out.get("OUT_PARAM_NAME")); (String) out.get("OUT_PARAM_NAME2"));


或者您可以将所有结果保存在一个列表中以供以后处理:


SimpleJdbcCall call = new SimpleJdbcCall(this.jdbcTemplate);

List<Map<String, Object>> rows = call.getJdbcTemplate().queryForList(PROC_STRING, new Object[] { param1, param2 });



查看完整回答
反对 回复 2021-10-28
  • 3 回答
  • 0 关注
  • 510 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信