我正在尝试使用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通过子句查询进行排序。
答案 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注入