Передать параметр в like используя JdbcTemplate

121
23 октября 2019, 22:40

Имеется такой sql

select
c.customer_id,
c.first_name,
c.middle_name,
c.last_name,
e.education_id,
e.name education_name,
sp.specialty_id,
sp.name specialty_name,
st.status_id,
st.name status_name,
c.telephone,
c.email,
i.image_id,
i.value
from customer c
join education e on e.education_id = c.education_id
join specialty sp on sp.specialty_id = c.specialty_id
join status st on st.status_id = c.status_id
left join image i on i.image_id = c.image_id
where
last_name like '%?%'
and
middle_name like '%?%'
and
first_name like '%?%'

Выполняя его в pgAdmin, никаких ошибок не появляется, но пытаясь выполнить его через JdbcTemplate

List<Customer> customers = getJdbcTemplate().query(GET_CUSTOMERS,
                new Object[]{"отов", "сандр", "лекс"},
                customerMapper);
        return customers;

получаю такой Exception

Exception in thread "main" org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [select
c.customer_id,
c.first_name,
c.middle_name,
c.last_name,
e.education_id,
e.name education_name,
sp.specialty_id,
sp.name specialty_name,
st.status_id,
st.name status_name,
c.telephone,
c.email,
i.image_id,
i.value
from customer c
join education e on e.education_id = c.education_id
join specialty sp on sp.specialty_id = c.specialty_id
join status st on st.status_id = c.status_id
left join image i on i.image_id = c.image_id
where
last_name like '%?%'
and
middle_name like '%?%'
and
first_name like '%?%']; Индекс колонки вне диапазона: 1. Допустимые значения: 1..0; nested exception is org.postgresql.util.PSQLException: Индекс колонки вне диапазона: 1. Допустимые значения: 1..0
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1444)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:632)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:669)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:763)
    at ru.dmitriikotiashov.dao.springjdbc.CustomerDaoJdbc.getCustomersByParameters(CustomerDaoJdbc.java:28)
    at ru.dmitriikotiashov.Main.main(Main.java:40)
Caused by: org.postgresql.util.PSQLException: Индекс колонки вне диапазона: 1. Допустимые значения: 1..0
    at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:65)
    at org.postgresql.core.v3.SimpleParameterList.setStringParameter(SimpleParameterList.java:128)
    at org.postgresql.jdbc.PgPreparedStatement.bindString(PgPreparedStatement.java:996)
    at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:326)
    at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:313)
    at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:400)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:163)
    at org.springframework.jdbc.core.ArgumentPreparedStatementSetter.doSetValue(ArgumentPreparedStatementSetter.java:69)
    at org.springframework.jdbc.core.ArgumentPreparedStatementSetter.setValues(ArgumentPreparedStatementSetter.java:50)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:676)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
    ... 6 more

Если я буду передаваь в JdbcTemplate что то через просто равно

select
c.customer_id,
c.first_name,
c.middle_name,
c.last_name,
e.education_id,
e.name education_name,
sp.specialty_id,
sp.name specialty_name,
st.status_id,
st.name status_name,
c.telephone,
c.email,
i.image_id,
i.value
from customer c
join education e on e.education_id = c.education_id
join specialty sp on sp.specialty_id = c.specialty_id
join status st on st.status_id = c.status_id
left join image i on i.image_id = c.image_id
where
last_name = ?
and
middle_name = ?
and
first_name = ?

то всё отработает отлично, но указывая в операторе like процент или одинарную ковычку, то падет эксепшен. Вопрос в том, как мне его передать или есть ли источник где это подробно описано? (В гугле не особо получилось найти примеры связанные с оператором like)

READ ALSO
Помощь с Java Servlets Jsp

Помощь с Java Servlets Jsp

я новичок, ещё не разобрался с сервлетамиВ общем, на странице index

114
Gulp Watch не следит за файлами

Gulp Watch не следит за файлами

При старте gulp watch выдает :

135
Как сделать эффект такого треуголника в секции?

Как сделать эффект такого треуголника в секции?

Как сделать эффект такого треуголника в секции?

121
Как изменить transition-delay на &ldquo;обратном пути&rdquo;?

Как изменить transition-delay на “обратном пути”?

Чтобы понять, я приведу код-пример:

143