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 浏览器、环境变量)。
我有一个 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 浏览器、环境变量)。