无法将值放入java spring引导中的sql语句中

mec1mxoz  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(285)

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

返回零个对象。
我无法将值传递到此语句中。

e5njpo68

e5njpo681#

在java(或任何语言)中,标准的方法是使用一个 ? 占位符,然后将通配符表达式绑定到该占位符:

private static final String SQL_SEARCH_ALL = "SELECT * FROM product WHERE name LIKE ?";
String searchInput = "%cola%";
return jdbcTemplate.query(SQL_SEARCH_ALL, new Object[]{ searchInput }, productRowMapper);
twh00eeo

twh00eeo2#

jdbc参数不是在您使用 ? 标记;这将打开对sql注入的查询。根据每个数据库和每个jdbc驱动程序 ? 参数标记变化。
可以肯定地说,一个参数通常可以到达一个典型的文本值可以到达的地方,但情况并非总是这样。例如,在db2中 FETCH FIRST 5 ROWS ONLY 不接受 ? 而不是文字 5 .
在您的案例中,典型的解决方案是 CONCAT() . 例如:

private static final String SQL_SEARCH_ALL =
  "SELECT * FROM product WHERE name LIKE CONCAT('%', ?, '%')";

当然,如果提供了空参数,您需要决定要发生什么。可能是 COALESCE() 那里的功能正常。

相关问题