namedparameterjdbctemplate mvc journaldev example java spring jdbc

java - mvc - Cláusula Spring Like



spring jdbctemplate configuration (4)

¿Has intentado colocar el% de comodines en tu cadena sql (no el valor de la variable de vinculación en sí)?

String finalName= nameParam.toLowerCase().trim(); String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE ''%:finalName%''";

Estoy tratando de usar un MapSqlParameterSource para crear una consulta usando una cláusula Like.

El código es algo como esto. La función que lo contiene recibe 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);

Esto no funciona correctamente, dándome entre 0 y 10 resultados cuando debería recibir miles. Básicamente quiero que la consulta final se vea así:

SELECT count(*) FROM People WHERE LOWER(NAME) LIKE ''%name%''

pero esto evidentemente no está sucediendo. Cualquier ayuda sería apreciada.

Editar:

También he intentado poner el ''%'' s en el SQL, como

String finalName= nameParam.toLowerCase().trim(); String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE ''%:pname%'' "

;

pero esto tampoco funciona.


No desea las comillas alrededor de su cadena finalName. con los parámetros nombrados no necesita especificarlos. Esto debería funcionar:

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);


Podemos usar JdbcTemplate simple en lugar de NamedParamJdbcTemplate

String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE ? "; String finalName= "%" +nameParam.toLowerCase().trim() + "%"; //Notes: no quote getJdbcTemplate().queryForInt(namecount, new Object[] {finalName});

Espero que sea útil para alguien que use JdbcTemplate


Esta solución funcionó para mí. Pongo el "%" en la lista de parámetros de Object []:

String sqlCommand = "SELECT customer_id, customer_identifier_short, CONCAT(RTRIM(customer_identifier_a),'' '', RTRIM(customer_identifier_b)) customerFullName " + " FROM Customer " + " WHERE customer_identifier_short LIKE ? OR customer_identifier_a LIKE ? " + " LIMIT 10"; List<Customer> customers = getJdbcTemplate().query(sqlCommand, new Object[] { query + "%", query + "%"}, new RowMapper<Customer>() { public Customer mapRow(ResultSet rs, int i) throws SQLException { Customer customer = new Customer(); customer.setCustomerFullName(rs.getString("customerFullName")); customer.setCustomerIdentifier(rs.getString("customer_identifier_short")); customer.setCustomerID(rs.getInt("customer_id")); return customer; } }); return customers;