Spring Как пункт

Я пытаюсь использовать 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%' "

;

но это не работает также.

12
задан Chris 14 July 2010 в 17:39
поделиться

2 ответа

Вы не хотите заключать в кавычки строку 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);
26
ответ дан 2 December 2019 в 05:39
поделиться

Вы пробовали поместить подстановочные знаки % в строку sql (а не само значение переменной bind):

String finalName= nameParam.toLowerCase().trim();
String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE '%:finalName%'";
0
ответ дан 2 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: