как передать несколько значений для запроса с помощью jdbcTemplate весной

В моем приложении Spring Hibernate у меня есть все запросы sql в одном файле common_queries.xml, где для некоторых запросов требуется от 2 до 3 параметров, как показано ниже.

   <query id="mining.fuel" no-of-params="2">
select ms.id id,ms.name value,concat(ms.name,' ','  (',ms.code,')') label,ms.rate rate     from mining_fuel ms where ms.name like '?' and ms.fuel_type_id=?  LIMIT 10
 </query>   

В моем daoImpl я получаю этот запрос

lookupList = jdbcTemplate.queryForList(q1.getQuery());

Я получу запрос здесь, но как передать значение '? здесь, у меня есть эти 2 значения со мной в daoImpl. Пожалуйста, пришлите код того, как этого добиться. Я не хочу использовать подготовленный оператор.


person Anupama    schedule 10.08.2011    source источник


Ответы (3)


Используйте эта перегруженная версия, которая принимает Object vararg для передачи параметров запроса:

lookupList = jdbcTemplate.queryForList(q1.getQuery(), value1, value2, value3);
person Costi Ciudatu    schedule 10.08.2011
comment
ну, я пробовал, что у меня есть 2 значения, такие как (q1.getQuery(), lookupValue, filterType); но когда я жестко задаю lookupValue и передаю только один параметр filterType, он работает нормально, но когда я делаю это, обратное его бросание java.sql.SQLException : параметры не определены во время prepareCall(), и когда я передаю оба значения, он выдает java.sql.SQLException: индекс параметра выходит за пределы. 2 не находится между допустимыми значениями 1 и 1. Есть ли проблема с запросом выбора рядом с «нравится», о котором я упоминал выше? - person Anupama; 10.08.2011
comment
Попробуйте убрать кавычки вокруг первого ?: like ?. - person Costi Ciudatu; 10.08.2011
comment
на самом деле я хочу использовать (например, '?%'), но если я удалю одинарные кавычки (например,? %), это покажет исключение грамматики sql. Если я использую с кавычками, его параметр showin выходит за пределы исключения. - person Anupama; 11.08.2011
comment
Я думаю, вам нужно использовать его без кавычек и добавить «%» к значению: ... like ? ..., и тогда ваше значение должно быть someString + '%' - person Costi Ciudatu; 11.08.2011

Я думаю, что вам нужно только создать массив объектов с параметрами, используемыми запросом, имейте в виду, что порядок важен, потому что значение1 будет первой заменой? в запросе.

lookupList = jdbcTemplate.queryForList(q1.getQuery(), new Object[]{value1, value2, value3});
person German Attanasio    schedule 01.06.2013

Сначала вызывается метод queryForList для ссылки jdbctemplate и передается запрос и массив типов объектов в этот массив типов объектов, мы должны передавать только объекты, что означает, что если у нас есть идентификатор, это тип int, который мы должны преобразовать в тип объекта, помещая его внутрь массива объектов.

lookupList = jdbcTemplate.queryForList (q1.getQuery, новый объект [] {обозначение, новое целое число (идентификатор), новое число с плавающей запятой (сал)}

person naresh    schedule 01.06.2013