web-dev-qa-db-fra.com

comment interroger une liste <String> dans jdbctemplate

J'utilise springs jdbctemplate et exécute une requête comme ci-dessous:

SELECT COLNAME FROM TABLEA GROUP BY COLNAME

Aucun paramètre nommé n'est transmis, cependant, le nom de la colonne, COLNAME, sera transmis par l'utilisateur.

Questions

  1. Existe-t-il un moyen d'avoir des espaces réservés, comme ? pour les noms de colonne? Par exemple SELECT ? FROM TABLEA GROUP BY ?

  2. Si je veux simplement exécuter la requête ci-dessus et obtenir un List<String> Quel est le meilleur moyen?

Actuellement je fais:

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

Existe-t-il un moyen d'avoir des espaces réservés, comme? pour les noms de colonne? Par exemple SELECT? DU GROUPE TABLEA PAR?

Utilisez la requête dynamique comme ci-dessous:

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

Si je veux simplement exécuter la requête ci-dessus et obtenir une liste, quelle est la meilleure façon?

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

EDIT: pour arrêter l'injection SQL, recherchez les caractères non Word dans colName comme:

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

Pour remplir une liste de chaînes, vous n'avez pas besoin d'utiliser le mappeur de lignes personnalisé. Implémentez-le à l'aide de queryForList.

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

Utilisez le code suivant

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

9
Amit Sargar

Vous ne pouvez pas utiliser d'espaces réservés pour les noms de colonne, les noms de table, les noms de types de données ou tout ce qui n'est pas des données.

1
Jayamohan