使用MapSqlParameterSource在Spring MVC中按子句查询

时间:2018-07-25 10:42:46

标签: java sql spring spring-mvc spring-data-jpa

我正在尝试使用order by子句在Spring MVC 4中进行SQL查询。但这行不通。我正在使用MapSQLParameterSource类来定义sql参数。

    MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue("lowerLimit", lowerLimit);
    params.addValue("upperLimit", upperLimit);
    params.addValue("filter", filter.trim()+"%");
    params.addValue("order", order);
    String sql = "SELECT * FROM tbl_Subject WHERE subjectName LIKE :filter ORDER BY :order limit :lowerLimit, :upperLimit";

实际上不起作用。不排序任何列。当我尝试进行硬编码时,它可以很好地工作。

String sql = "SELECT * FROM tbl_Subject WHERE subjectName LIKE :filter ORDER BY subjectId DESC limit :lowerLimit, :upperLimit";

如何使用MapSqlParameterSource通过子句查询进行排序。

1 个答案:

答案 0 :(得分:2)

问题出在这一行:

params.addValue("order", order);//consider this return col_name

这将被翻译为:

.. ORDER BY 'col_name' limit ..
            ^        ^

这是一个错误的语法,在逻辑上ORDER BY之后,您必须传递列名不是值

.. ORDER BY col_name limit ..
            ^^^^^^^^

相反,您必须直接将其传递给查询,但要通过carfull传递正确的名称,如果传递错误的输入,则可能导致语法错误或SQL注入