jdbcTemplate,存储过程返回值

时间:2015-08-13 10:17:24

标签: spring spring-jdbc

我有一个接受参数的存储过程并返回一个long值。

如何使用jdbcTemplate调用此存储过程并获取返回值。

String sql = ""call my_proc(?,?)"
long ret = jdbcTemplate.queryForObject(sql, Long.class, param1,param2);

这是对的吗?

3 个答案:

答案 0 :(得分:1)

有许多方法可以在Spring中调用存储过程。 您可以使用 SimpleJdbcTemplate ,也可以选择使用 JdbcTemplate 。看来你有兴趣使用JdbcTemplate。

以下是使用JdbcTemplate调用存储过程的可用方法

  1. 使用 CallableStatementCreator 方法
  2. 扩展抽象类 StoredProcedure
  3. 使用 CallableStatement
  4. 每种方法都有大量的互联网示例。明智地选择其中任何一个。

    顺便说一下,你的代码似乎没问题。但对于复杂的存储过程,调用像jdbcTemplate.queryForObject这样的存储过程是不够的。

答案 1 :(得分:0)

是的,看起来是正确的。 语法取决于数据库,例如对于postgres它将是:

Long ret = jdbcTemplate.queryForObject("select my_proc(?,?)", Long.class, param1, param2);
如果结果为空,

queryForObject抛出异常,希望你能处理

答案 2 :(得分:0)

您可以使用 SimpleJdbcCall 来调用存储过程 下面是代码片段,它说明了存储过程的调用并获取了返回值

SimpleJdbcCall jdbcCall =  new SimpleJdbcCall(jdbcTemplateSP).withProcedureName("spGetEmpDetails");
Map<String, Object> inParamMap = new HashMap<String, Object>();
inParamMap.put("EmpID", String.valueOf(id));
SqlParameterSource in = new MapSqlParameterSource(inParamMap);


Map<String, Object> simpleJdbcCallResult = jdbcCall.execute(in);