Я пытаюсь изменить обычный запрос на параметризованный запрос, используя jdbcTemplate.queryForObject
, чтобы избежать SQL-инъекций.Но запрос возвращает EmptyResultDataAccessException
- Неверный размер результата: ожидаемый 1, фактический 0, где нормальный запрос работает нормально.Ниже приведен обычный запрос, в котором я получаю правильный результат.
StringBuilder builder = new StringBuilder();
String AcctNameBuilder = adhpDetailUtil.getAccName();
builder.append("select * " +
"from gfc.LSI_ELGBLTY " +
"where INSURANCE_ID = '" + request.getInsuranceId() + "' and " +
"SYS_CD = '" + request.getSystemId() + "' and " +
"ACCT_TYPE in (" + AcctNameBuilder.toString() + ")");
Вот параметризованный запрос, который я создал из вышеуказанного запроса.
StringBuilder builder = new StringBuilder();
String AcctNameBuilder = adhpDetailUtil.getAccName();
final String QUERY = "select * " + "from gfc.LSI_ELGBLTY " + "where INSURANCE_ID = ? and " + "SYS_CD = ? and " + "ACCT_TYPE in (?)";
Object[] params = new Object[] {
request.getInsuranceId(),request.getSystemId(),AcctNameBuilder};
String ids = jdbcTemplate.queryForObject(QUERY, params, String.class);
builder.append(ids)
В первом случае, строитель.append содержит точный запрос, а во втором случае jdbcTemplate.queryForObject
возвращает EmptyResultDataAccessException
.Что я тут не так делаю.