Имеется такой 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)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты