将查询转换为Java jdbc模板中的参数化预处理语句

时间:2018-08-31 06:24:44

标签: java spring jdbc sql-injection parameterized-query

如何在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注入吗?我已经为此搜索了一个解决方案,但找不到确切的解决方案。

1 个答案:

答案 0 :(得分:3)

我建议开始使用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实体。

那里确实有很好的教程: