JdbcTemplate - 替换问号

JdbcTemplate - replace question mark

我有一个 sql 查询。

String sql = "SELECT ? FROM Users WHERE Lastname=?";

我使用 JDBCTemplate 中的方法 queryForList

Object [] myparams = {"name", "Doe"};
int [] mytypes = {Types.VARCHAR, Types.VARCHAR};
List<Map<String,Object>> listOfMaps = jdbc.queryForList(sql, myparams, mytypes);

输出不正确,因为第一个问号有问题。我以为问号会被 myparams 数组中的参数替换,但它并没有那样工作。

是否可以实现我想要的效果,而不是通过手动向字符串添加参数?

where 语句中的参数只能使用问号。

JDBC 和 Spring 都没有提供从较小的部分构建 SQL 查询的方法。

您可以尝试使用特殊图案来标记要更换的部件。通常这不是好的做法(由于可能 sql 注入攻击)

 String sql = "SELECT ${columns} FROM Users WHERE Lastname=?"
     .replace("${columns}", "name");

为了安全起见,您必须确保 "name" 不能被攻击者注入。尝试使用字符串常量 (final static String) 或枚举。切勿在未经验证的情况下接受来自外部的值(Web 浏览器、环境变量)。