Я пытаюсь использовать MapSqlParameterSource для создания запроса с помощью Подобного пункта.
Код - что-то вроде этого. Функция, содержащая его, получает nameParam:
String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE :pname ";
String finalName= "'%" +nameParam.toLowerCase().trim() + "%'";
MapSqlParameterSource namedParams= new MapSqlParameterSource();
namedParams.addValue("pname", finalName);
int count= this.namedParamJdbcTemplate.queryForInt(namecount, namedParams);
Это не работает правильно, давая мне где-нибудь между 0-10 результатами, когда я должен получать тысячи. Я по существу хочу, чтобы заключительный запрос был похож:
SELECT count(*) FROM People WHERE LOWER(NAME) LIKE '%name%'
но этого очевидно не происходит. Любая справка ценилась бы.
Править:
Я также попытался поместить '% в SQL, как
String finalName= nameParam.toLowerCase().trim();
String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE '%:pname%' "
;
но это не работает также.
Вы не хотите заключать в кавычки строку finalName. с указанными параметрами указывать их не нужно. Это должно работать:
String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE :pname ";
String finalName= "%" + nameParam.toLowerCase().trim() + "%";
MapSqlParameterSource namedParams= new MapSqlParameterSource();
namedParams.addValue("pname", finalName);
int count= this.namedParamJdbcTemplate.queryForInt(namecount, namedParams);
Вы пробовали поместить подстановочные знаки % в строку sql (а не само значение переменной bind):
String finalName= nameParam.toLowerCase().trim();
String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE '%:finalName%'";