java - 将查询转换为 java jdbc 模板中的参数化准备语句
问题描述
如何在 Spring JDBC 中将普通查询转换为参数化准备语句?以下是我要更改的查询:
private String queryBuilder(Request request, Map<String, String> action) {
StringBuilder builder = new StringBuilder();
builder.append("select * " +
"from google_play " +
"where ID = '" + request.getId() + "' and " +
"SYS_CD = '" + request.getSystemCd() + "' and " +
"SYS_DT >='"+request.getSystemDate+"'");
return builder.toString();
}
有人可以建议一种适当的方法来更改此查询以避免 sql 注入吗?我已经为此搜索了一个解决方案,但找不到确切的解决方案。
解决方案
我建议开始使用 Spring 的 JDBCTemplate,它将帮助您清理查询:
这将为您提供以下列方式指定参数的选项:
final String QUERY = "select * " +
"from google_play " +
"where ID = ? and " +
"SYS_CD = ? and " +
"SYS_DT >= ?);
然后查询它:
YOUR_CLASS[] yourArray = jdbcTemplate.queryForObject(QUERY, request.getId(), request.getSystemCd(), request.getSystemDate, YOUR_CLASS[]);
例如,YOUR_CLASS 可以是 Person,如果您正在查询 Person 表,我相信在您的情况下,它会类似于 GooglePlay 实体。
那里有非常好的教程: