我在用着
> jdbcTemplate来使JDBC连接到一个mySQL数据库
>准备好的语句,尽可能保护自己免受SQL注入攻击
>需要接受用户对十几个不同列中的数据进行排序的请求
>以下语句
jdbcTemplate.query("SELECT * FROM TABLE1 ORDER BY ? ?",colName,sortOrder);
当然这不起作用,因为变量绑定不应该指定列名称,只是查询中表达式的参数值.
所以…人们如何解决这个问题?只是在Java代码中进行排序似乎是一个简单的解决方案,但是由于我得到一个可以排序列的变量字符串,一个变量告诉我排序顺序….这是比较器条件的丑陋数量盖.这似乎应该是解决它的常见模式的常见问题?
解决方法
占位符?只能用于参数值,但不能用于列和排序顺序方向.所以这样做的标准方法就是指出.
here是使用
String#format()或类似的东西来附加您的列名称和订单值给您的查询.
另一种选择是使用Spring Data JPA,您可以在其中将参数作为参数赋予类型为Sort的实例,该实例可以包含数据库进行排序的所有必需信息.