如何在jdbctemplate中查询列表

我正在使用spring jdbctemplate并运行如下查询:

SELECT COLNAME FROM TABLEA GROUP BY COLNAME

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

问题

  1. 有没有办法让占位符,比如? 列名? 例如SELECT ? FROM TABLEA GROUP BY ? SELECT ? FROM TABLEA GROUP BY ?

  2. 如果我想简单地运行上面的查询并获得List ,最好的方法是什么?

目前我在做:

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

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

使用动态查询如下:

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

如果我想简单地运行上面的查询并获得List最好的方法是什么?

 List data = getJdbcTemplate().query(query, new RowMapper(){ 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 } 

要填充String列表,您不需要使用自定义行映射器。 使用queryForList实现它。

 Listdata=jdbcTemplate.queryForList(query,String.class) 

使用以下代码

List data = getJdbcTemplate().queryForList(query,String.class)

您不能将占位符用于列名,表名,数据类型名称或基本上不是数据的任何内容。