如何在JdbcTemplate中查询List<String>?

2022-09-01 01:13:20

我正在使用Spring并运行如下查询:JdbcTemplate

SELECT COLNAME FROM TABLEA GROUP BY COLNAME

没有传递命名参数,但是,列名 , 将由用户传递。COLNAME

问题

  1. 有没有办法有占位符,就像列名一样?例如?SELECT ? FROM TABLEA GROUP BY ?

  2. 如果我想简单地运行上面的查询并得到一个什么是最好的方法?List<String>

目前我正在做:

List<Map<String, Object>> data = getJdbcTemplate().queryForList(query);
for (Map m : data) {
  System.out.println(m.get("COLNAME"));
}

答案 1

若要填充字符串列表,无需使用自定义行映射器。使用 实现它。queryForList

List<String>data=jdbcTemplate.queryForList(query,String.class)

答案 2

有没有办法有占位符,比如?列名?例如 SELECT ?来自 TABLEA GROUP BY ?

使用动态查询,如下所示:

String queryString = "SELECT "+ colName+ " FROM TABLEA GROUP BY "+ colName;

如果我想简单地运行上面的查询并获取列表,那么最好的方法是什么?

List<String> data = getJdbcTemplate().query(query, new RowMapper<String>(){
                            public String mapRow(ResultSet rs, int rowNum) 
                                                         throws SQLException {
                                    return rs.getString(1);
                            }
                       });

编辑:要停止SQL注入,请检查colName中的非单词字符为:

          Pattern pattern = Pattern.compile("\\W");
          if(pattern.matcher(str).find()){
               //throw exception as invalid column name
          }

推荐