我有 private static final String SQL_SEARCH_ALL = "SELECT * FROM product WHERE name LIKE '%?%'";
sql语句,其中我需要传递一个查询字符串。什么时候而不是 ?
马克,我传了一根绳子 '%cola%'
很好用。
我像以前一样使用jdbctemplate传递paramater
return jdbcTemplate.query(SQL_SEARCH_ALL, new Object[]{searchInput}, productRowMapper);
返回零个对象。
我无法将值传递到此语句中。
2条答案
按热度按时间e5njpo681#
在java(或任何语言)中,标准的方法是使用一个
?
占位符,然后将通配符表达式绑定到该占位符:twh00eeo2#
jdbc参数不是在您使用
?
标记;这将打开对sql注入的查询。根据每个数据库和每个jdbc驱动程序?
参数标记变化。可以肯定地说,一个参数通常可以到达一个典型的文本值可以到达的地方,但情况并非总是这样。例如,在db2中
FETCH FIRST 5 ROWS ONLY
不接受?
而不是文字5
.在您的案例中,典型的解决方案是
CONCAT()
. 例如:当然,如果提供了空参数,您需要决定要发生什么。可能是
COALESCE()
那里的功能正常。