Я использую JdbcTemplate весны, и у меня есть следующий запрос:как запросить с GroupBy в JdbcTemplate
SELECT ?, count(*) as " + counter + " FROM data GROUP BY ?
Когда я использую
List<Map<String, Object>> values = jdbcTemplate.queryForList(sql,columnName, columnName);
я получаю неверные результаты запроса - Я получаю одну строку с счетчиком 11, которая является счетчиком ВСЕХ строк в таблице данных. Так ясно, что groupBy работает неправильно. я отлажен код и увидела, что выполняется запрос на самом деле
SELECT 'COLUMN_3', count(*) as COUNTER FROM DATA GROUP BY 'COLUMN_3'
Так что я подозреваю, что дополнительный апостроф то, что вызывает ошибку.
Как я могу это решить? (Без использования простого запроса String - я хочу использовать PreparedStatement, поэтому у меня не будет проблем с SQL Injection).
Вы не можете использовать заполнитель для имен столбцов или таблиц. Эти данные необходимы базе данных для подготовки плана выполнения запроса. подготовленные заполнители выписок для значений. Если вы позволите пользователю выбрать то, что он хочет выбрать (что крайне редко), тогда отклоните выбор, если он не является частью белого списка имен столбцов. –
Это по-прежнему странно для меня - потому что запрос «почти» преуспевает, все, что осталось, это те апострофы ... Но, поскольку вы не единственный, кто сказал это, я думаю, у меня нет выбора. Благодарю. – yishaiz
Это не работает. Он выбирает постоянную строку «COLUMN_3» вместо выбора значения column_3. Потому что вы не можете передавать имена столбцов в качестве подготовленных параметров оператора. Только значения. –