我有一个SQL查询。
String sql = "SELECT ? FROM Users WHERE Lastname=?";
我使用JDBCTemplate
中的方法queryForListObject [] myparams = {"name", "Doe"};
int [] mytypes = {Types.VARCHAR, Types.VARCHAR};
List<Map<String,Object>> listOfMaps = jdbc.queryForList(sql, myparams, mytypes);
输出不正确,因为第一个问号出现问题。我认为问号将被myparams数组中的参数替换,但它没有那样工作。
是否可以做我想要实现的目标,但不能手动将参数添加到字符串中?
答案 0 :(得分:2)
您只能将问号用于where语句中的参数。
答案 1 :(得分:1)
JDBC和Spring都没有提供从较小的部分构建SQL查询的方法。
您可以尝试使用特殊图案来标记要替换的部件。一般来说,这不是一个好习惯(由于可能的SQL注入攻击)
String sql = "SELECT ${columns} FROM Users WHERE Lastname=?"
.replace("${columns}", "name");
为确保安全,您必须确保攻击者无法注入"name"
。尝试使用字符串常量(final static String
)或枚举。永远不要接受来自外部的值(网络浏览器,环境变量)而不验证它们。