使用预准备语句和变量将Java中的Order By与JDBC驱动程序绑定在一起

Rae*_*vik 18 java sorting collections jdbc jdbctemplate

我正在使用

  1. jdbcTemplate与mySQL数据库建立JDBC连接
  2. 准备好的语句尽可能地保护自己免受SQL注入攻击
  3. 需要接受来自用户的请求,以对十几个不同列中的任何一列进行数据排序
  4. 以下声明

    jdbcTemplate.query("SELECT * FROM TABLE1 ORDER BY ? ?", colName, sortOrder);
    
    Run Code Online (Sandbox Code Playgroud)

当然这不起作用,因为变量绑定不应该仅为查询中的表达式的参数值指定列名.

那么......人们如何解决这个问题呢?只是在Java代码中进行排序似乎是一个简单的解决方案,但是因为我得到一个用于排序的列的变量字符串,并且一个变量告诉我排序顺序....这是一个丑陋的比较器条件数量到覆盖.这似乎应该是解决它的常见模式的常见问题......

Ole*_*nko 19

占位符?只能用于参数值,但不能用于列和排序顺序方向.因此,这里指出的标准方法是使用String#format()或类似的方法将列名和顺序值附加到查询中.

另一种选择是使用Spring Data JPA,您可以将您的方法作为参数提供给Sort类型的实例,该实例可以包含要排序的数据库所需的所有信息.