Java 如何查询列表<;字符串>;在JdbcTemplate中?

Java 如何查询列表<;字符串>;在JdbcTemplate中?,java,jdbc,jdbctemplate,spring-jdbc,Java,Jdbc,Jdbctemplate,Spring Jdbc,我正在使用Spring的JdbcTemplate,并运行如下查询: SELECT COLNAME FROM TABLEA GROUP BY COLNAME 没有传递任何命名参数,但是,用户将传递列名COLNAME 问题 是否有一种方法可以使用占位符,例如列名的??例如SELECT?从表格A分组依据? 如果我只想运行上面的查询并获得一个列表最好的方法是什么 目前我正在做: List<Map<String, Object>> data = getJdbcTemplate

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

SELECT COLNAME FROM TABLEA GROUP BY COLNAME
没有传递任何命名参数,但是,用户将传递列名
COLNAME

问题

  • 是否有一种方法可以使用占位符,例如列名的
    ?例如
    SELECT?从表格A分组依据?

  • 如果我只想运行上面的查询并获得一个
    列表
    最好的方法是什么

  • 目前我正在做:

    List<Map<String, Object>> data = getJdbcTemplate().queryForList(query);
    for (Map m : data) {
      System.out.println(m.get("COLNAME"));
    }
    
    List data=getJdbcTemplate().queryForList(查询);
    用于(地图m:数据){
    System.out.println(m.get(“COLNAME”);
    }
    
    有没有一种方法可以设置占位符,比如?关于列名?例如选择?来自TABLEA GROUP BY

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

    String queryString = "SELECT "+ colName+ " FROM TABLEA GROUP BY "+ colName;
    
    如果我只想运行上面的查询并得到一个列表,那么最好的方法是什么


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

    请使用以下代码


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

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

    List<String>data=jdbcTemplate.queryForList(query,String.class)
    
    Listdata=jdbcTemplate.queryForList(query,String.class)
    
    在使用动态查询时,我将把用户输入的任何内容放入我的动态查询中,这是一个可怕的部分。@birdy:您可能想使用一个简单的正则表达式
    \\w
    检查字符串是否只有
    字字符。这将阻止任何sql注入的可能性。您应该使用准备好的语句,而不是使用正则表达式。尝试以下操作:
    getJdbcTemplate().query(“从表中选择?”,new RowMapper(){public String mapRow(ResultSet rs,int rowNum)抛出SQLException{return rs.getString(1);}},colName,colName)如果有多个参数,我们将如何映射行。。即。。在使用lambda替换columnname时,可以使用以下内容:List data=getJdbcTemplate().query(query,(rs,rowNum)->rs.getString(1));这很好用。接下来,如果查询具有IN运算符,我如何将值传递给此?请协助!这些值在“In”运算符中列出
    
              Pattern pattern = Pattern.compile("\\W");
              if(pattern.matcher(str).find()){
                   //throw exception as invalid column name
              }
    
    List<String>data=jdbcTemplate.queryForList(query,String.class)