我使用的是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 顺序排序。这是一个错误,如果不是,为什么这是不可接受的????