2015-08-13 5 views
0

У меня есть хранимая процедура, которая принимает параметры и возвращает длинное значение.jdbcTemplate, значение восстановления хранимой процедуры

Как использовать jdbcTemplate для вызова этой хранимой процедуры и получения возвращаемого значения.

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

Это право?

ответ

0

Существует несколько способов вызова хранимых процедур весной. Вы можете использовать SimpleJdbcTemplate, и у вас есть возможность использовать JdbcTemplate. Кажется, вам интересно использовать JdbcTemplate.

Ниже приведены доступные подходы вызвать хранимую процедуру с помощью JdbcTemplate

  1. Использование CallableStatementCreator на основе подхода
  2. Расширенная абстрактный класс StoredProcedure
  3. Использование CallableStatement

Множество примеров доступно в Интернете для каждого подхода. Правильно выбирать любого из них.

Кстати, ваш код выглядит нормально. Но для сложной хранимой процедуры вызов вызова хранимой процедуры, такой как этот jdbcTemplate.queryForObject, недостаточен.

0

Да, он выглядит правильно. Синтаксис зависит от базы данных, например. для Postgres будет:

Long ret = jdbcTemplate.queryForObject("select my_proc(?,?)", Long.class, param1, param2); 

queryForObject бросает исключение, если результат пуст, надеюсь, что вы будете обращаться с этим

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);