sto usando molle jdbctemplate e l'esecuzione di una query come di seguito:come eseguire una query per un elenco <String> in jdbctemplate
SELECT COLNAME FROM TABLEA GROUP BY COLNAME
ci sono denominati parametri passati, tuttavia, il nome della colonna, COLNAME
, volontà essere passato dall'utente
Domande
C'è un modo per avere i segnaposto, come
?
per i nomi di colonna? Ad esempioSELECT ? FROM TABLEA GROUP BY ?
Se voglio semplicemente eseguire la query precedente e ottenere un
List<String>
qual è il modo migliore?
Attualmente sto facendo:
List <Map<String, Object>> data = getJdbcTemplate().queryForList(query);
for (Map m : data)
System.out.println(m.get("COLNAME"));
In utilizzando query dinamica sarò mettendo tutto ciò che l'utente entra nella mia query dinamica che è una parte spaventosa. – birdy
@birdy: potresti voler controllare che la stringa abbia solo "caratteri di parola" usando una semplice espressione regolare "\\ w". Ciò impedirà qualsiasi possibilità di iniezione sql. –
Dovresti usare le istruzioni preparate invece di fare questa roba delle espressioni regolari. Prova: '' 'getJdbcTemplate(). Query (" SELECT? FROM TABLEA GROUP BY? ", Nuovo RowMapper() { public String mapRow (ResultSet rs, int rowNum) genera SQLException { return rs.getString (1); } }, colName, colName); '' ' –
Jean