2

我使用的是NamedParameterJdbcTemplate,但发现这个问题出在底层的JdbcTemplate 类中,所以我将在JdbcTemplate 出现问题时展示问题(所以这里不用担心SQL 查询的安全性)。

这是我想要实现的目标:

String sql = "SELECT * FROM clients ORDER BY ? ?";
    return jdbcTemplate.query(sql,
            new Object[] { "name", "ASC" },
            new ClientResultSetExtractor());

我希望第一个占位符替换为“name”,第二个占位符替换为“ASC”,这将创建有效的 SQL 查询:

SELECT * FROM clients ORDER BY name ASC

但不幸的是,运行该 jdbc 查询不起作用:

ERROR:  syntax error at or near "$2" at character 35
STATEMENT:  SELECT * FROM clients ORDER BY $1 $2

我究竟做错了什么?

编辑

我曾假设问题是按顺序排列的两个占位符,但即使我删除了第一个占位符,它仍然不会只接受最后一个占位符,它应该告诉查询是按 ASC 还是 DESC 顺序排序。这是一个错误,如果不是,为什么这是不可接受的????

4

1 回答 1

2

您正在尝试错误地使用参数。

参数不是列名或 SQL 语句关键字。它们是数据内容(例如,WHERE LastName = ?是有效的参数化语句,WHERE ? = 'Smith'不是)。

于 2012-06-11T02:48:58.820 回答